(10 * 1.11 = 11.1)评估为FALSE。如何纠正?

时间:2019-10-18 10:37:32

标签: excel vba

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) 

1 个答案:

答案 0 :(得分:5)

当涉及.1时,浮点运算几乎是不正确的。原因是.1不能用1/2^n的16位数字表示为n

这些是一些数字,使用浮点数不会出现问题,因为它们可以表示为1/2^n

  • 0.128 = 1/2 ^ 5
  • 0.5 = 1/2 ^ 1
  • 0.375 = 1/2 ^ 2 + 1/2 ^ 3

因此,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