a = 10
b = 1.11
c = 11.1
' (mathematically: 10*1.11=11.1)
debug.print a*b = c
我得到的是False(不正确),而不是True(正确)。
我知道这种错误是由于二进制计数方式而发生的,因此我必须忍受它。
问题是:使其正常工作的最佳方法是什么?
将数字与小数进行比较时,以下是否是我们应该使用的最佳解决方案?可靠吗?
round(a*b,2) = round(c,2)
答案 0 :(得分:5)
当涉及.1
时,浮点运算几乎是不正确的。原因是.1
不能用1/2^n
的16位数字表示为n
。
这些是一些数字,使用浮点数不会出现问题,因为它们可以表示为1/2^n
:
因此,type decimal可以解决问题。这是最好的方法:
Sub TestMe()
Dim a, b, c 'declaring as Variant, as Decimal cannot be declared in VBA
a = CDec(10)
b = CDec(1.11)
c = CDec(11.1)
Debug.Print a * b = c
End Sub