带有两个小数位的Excel数字

时间:2016-07-11 08:06:08

标签: excel vba excel-vba

我写了下面这个简单的代码,它接受用户对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

2 个答案:

答案 0 :(得分:5)

您需要使用Double数据类型。如果使用整数类型(IntegerLong),它将对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"))

标准格式包含两位小数。