为什么在VBA Access中134.605 * 100不等于13460.5?

时间:2014-03-11 10:22:11

标签: vba access-vba

我想它与精度有关,但我不明白。我有这段代码应该执行四舍五入到位( value 是输入):

Dim a As Double
Dim b As Double
Dim c As Double
Dim result As Double

a = CDbl(value) * 100
b = a + 0.5 //because Int in the next line performs floor operation, 0.5 is added to ensure proper rounding, example for 123.5: Int(123.5) = 123 but we need Int(123.5 + 0.5) = 124
c = Int(b)
result = c / 100

问题是,对于值134.605,它无法正常工作。在调试时我发现一个值计算不正确。 事实上我已经检查了这个:

?13460.5 = (134.605*100)
False
?(134.605*100) - 13460.5
-1,02318153949454E-12

我被困住了。我可以用不同的方式重写舍入函数,但是如果没有* 100乘法我就不知道了。或者我可以找到如何使* 100操作正确地为所有值。任何人都可以试着解释一下为什么会发生并提出解决方案吗?

1 个答案:

答案 0 :(得分:2)

尝试Decimal数据类型。虽然您无法显式声明此类型的变量,但您可以通过将其声明为Variant并使用CDec进行转换来隐式地将其转换为此类型。

Debug.Print 13460.5 = CDec(134.605 * 100) 'Output - True