2016-07-11 11 views
2

N1とN2の入力を受け取り、それらを加算して出力(N3)として与える次の簡単なコードを書いています。これは問題を丸めます単に数字を入力するのではなく入力のExcel小数点以下2桁の数字

簡単な例:N1 = 25.5、N2 = 25.5 Right Answer = 51しかし、答えは52です。私はプログラミングに慣れています。

入力時にN1とN2から個々の入力を丸めずに、小数点以下6桁までN3を表示します。

Sub InputVariable() 

    Dim N1 As Integer 
    Dim N2 As Integer 
    Dim N3 As Integer 
    N1 = InputBox("Enter 1st number") 
    N2 = InputBox("Enter 2nd number") 
    N3 = N1 + N2 
    MsgBox ("Your total is " & N3) 
End Sub 

答えて

4

Doubleデータ型を使用する必要があります。整数型(IntegerまたはLong)を使用すると、変数に整数でない値を格納できないため、数値はN1 = InputBox(...)に丸められます。

編集:Doubleは、単精度(4バイト)に比べて倍精度(8バイト)を表します。 Doubleは2進数形式を使用しているため、0.1のような正確な値を格納することはできません(ちょうど10進数のシステムがあなたの桁数にかかわらず1/3を表すことはできません)。

実際に正確な計算を10進数で行う必要がある場合は、使用できるDecimal形式があります。あなたは実際にそれを宣言することはできませんが、数字を小数に変換してVariantに格納することができます。この例を参照してください:

Sub precisionTest() 
    Dim i As Long 
    Dim dbl As Double 
    Dim dblResult As Double 
    Dim dec As Variant 
    Dim decResult As Variant 

    dblResult = 0 
    decResult = 0 
    dbl = 0.00001 
    dec = CDec(0.00001) 
    For i = 1 To 100000 
    dblResult = dblResult + dbl 
    decResult = decResult + dec 
    Next i 
    MsgBox "Double result: " & dblResult & vbCr & "Decimal result: " & decResult 
End Sub 

EDIT2:丸めと数字のフォーマット:あなたは(表示目的のみのために)値を変更することなく、あなたの数の文字列を作成するFormat機能を使用することができます。有効な形式は次のようになり0は小数点が常に表示され、#はそれがゼロ以外だ場合、それが表示されますを意味している意味する「0 ##」:

Sub formatTest() 
    Dim dbl As Double 
    Dim dbl2 As Double 
    Dim dbl3 As Double 
    dbl = 1.234 
    dbl2 = 1.2 
    dbl3 = 0.1 
    MsgBox "Format(1.234,""0.##"") = " & Format(dbl, "0.##") & vbCr _ 
    & "Format(1.234,""0.00"") = " & Format(dbl, "0.00") & vbCr _ 
    & "Format(1.2,""0.##"") = " & Format(dbl2, "0.##") & vbCr _ 
    & "Format(1.2,""0.00"") = " & Format(dbl2, "0.00") & vbCr _ 
    & "Format(0.1,""#.##"") = " & Format(dbl3, "#.##") & vbCr _ 
    & "Format(0.1,""0.00"") = " & Format(dbl3, "0.00") & vbCr 
End Sub 

あなたが実際にあなたの番号ラウンドしたい場合は、Round(number,decimalplaces)

を使用します言及InWoodsとして
+0

@InWoodsフォーマット機能についてさらに詳しい情報を編集しました – arcadeprecinct

+0

ありがとうございました@arcadeprecinct非常にありがとうございます。それは完全に機能しており、そのように詳しく説明してくれてありがとうございます。私は本当に多くを学んだ:) – InWoods

1

は、あなたが、あなたはこのように、print文で出力をキャストすることができ、double型であることをN1、N2とN3が必要です

MsgBox ("Your total is " & Format(N3, "Standard")) 

標準フォーマットで小数第2位を含んでいます。

+0

助けていただきありがとうございます人々:)問題解決! – InWoods

+0

これは、私が直面していた別の問題に対して完璧に機能します。ありがとうございました:)さまざまなフォーマットの値を見つけるために参照できる辞書があるか、標準でなければならないという経験を通して、私たちに教えてください。もう一度援助のためのTy。 – InWoods

+0

私は知っているわけではありませんが、あなたはExcelで書式を混乱させて出力がどのようになるかを知ることができます。セルにいくつかの数字を書いてから、ホームリボン - >数値形式(ドロップダウンリスト) - > "数値形式" - > "カスタム"(カテゴリリスト) - >満足するまでタイプを編集してください。 – Carmelid

関連する問題