我想知道我在 VBA 中看到的这种行为。我正在使用即时控制台来调试我的代码并得到以下结果:
Debug.Print(Int(0.00024575*10000000+0.5))
2457
我希望这个结果是
2458
。有谁知道为什么会发生这种情况?正如预期的那样,在调用 Int
函数之前,计算采用双精度。
Debug.Print(VarType(0.00024575*10000000+0.5))
5
非常感谢任何帮助!
如果您运行以下测试:
Sub Test()
Dim d As Double: d = 0.5 + 0.00024575 * 10000000
Debug.Assert d = Int(d)
Debug.Assert 0.5 + 2457.5 = Int(0.5 + 2457.5)
Debug.Assert 0.5 + 0.00024575 * 10000000 = Int(CDbl(0.5 + 0.00024575 * 10000000))
Debug.Assert 0.5 + 0.00024575 * 10000000 = CDbl(0.5 + 0.00024575 * 10000000)
Debug.Assert 0.5 + 0.00024575 * 10000000 = VBA.Int(0.5 + 0.00024575 * 10000000)
Debug.Assert 0.5 + 0.00024575 * 10000000 = Int(0.5 + 0.00024575 * 10000000)
End Sub
你会看到只有最后一个断言失败了。这可能是一个编译器错误。
请注意,
Int
与 VBA.Int
不同。