意外的舍入错误

时间:2017-09-15 18:37:39

标签: vba excel-vba excel

有人可以向我解释以下内容吗?

Sub TestCalc()
    Dim Z As Double
    Dim Y As Double
    Dim X As Integer
    Dim W As Double
    Dim V As Double
    X = 44 / 14                         ' returns 3
    Z = (0.14 * 14)                     ' returns 1.96
    Y = ((44 / 14) - (44 \ 14)) * 14    ' returns 2 SHOULD RETURN 1.96
    W = (44 / 14) - X                   ' returns 0.142857142857143
    V = W * 14                          ' returns 2 SHOULD RETURN 1.96
End Sub

1.96是我期望从代码中获得的值。但是,当我使用硬编码值时,我只获得此值。如果我使用变量,它会将其向上舍入并返回值2(Y或V)。我需要理解为什么,因为1.96是我希望返回的值。我需要确保它正确执行此计算,以确保我的数学公式在我的主程序中正常运行

2 个答案:

答案 0 :(得分:3)

您的期望不正确。

0.14 * 14 = 1.96;但是,W是0.142857142857143 - 该值* 14 = 2。

答案 1 :(得分:0)

我猜测有一些看不见的条件决定你输入的数字是按整数还是双数计算的。当你输入Y时会发生什么 Y = ((44.0 / 14.0) - (44.0 \ 14.0)) * 14.0 或者您可以在Visual Basic中指定双精度。

本文的最后部分还提到了一种模式,可以在发生不安全的转换时向您发出警告,这可能有助于追踪它。 https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/operators-and-expressions/arithmetic-operators