我写了下面这个简单的代码,它接受用户对N1和N2的输入并将它们加起来并将它们作为输出(N3)。这有一个问题,它将每个输入四舍五入而不仅仅是拿数字。
简单示例:N1 = 25.5,N2 = 25.5正确答案= 51但它给出的答案是52.我是编程新手,所以我将不胜感激。
我想让它显示N3最多6个小数位,而不会在输入时将N1和N2的各个输入舍入。
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
答案 0 :(得分:5)
您需要使用Double
数据类型。如果使用整数类型(Integer
或Long
),它将对N1 = InputBox(...)
处的数字进行舍入,因为它不能在变量中存储非整数值。
编辑:Double
代表双精度(8字节),与单精度(4字节)相比。有趣的是,因为Double
使用二进制数格式,它不能存储精确的值,如0.1(就像十进制系统不管你有多少位数就不能表示1/3)。
如果您需要使用十进制数进行精确计算,可以使用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)
答案 1 :(得分:1)
正如InWoods所提到的,你需要N1,N2和N3是双重类型,然后你可以在print语句中转换输出,如下所示:
MsgBox ("Your total is " & Format(N3, "Standard"))
标准格式包含两位小数。