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として
@InWoodsフォーマット機能についてさらに詳しい情報を編集しました – arcadeprecinct
ありがとうございました@arcadeprecinct非常にありがとうございます。それは完全に機能しており、そのように詳しく説明してくれてありがとうございます。私は本当に多くを学んだ:) – InWoods