a = 10
b = 1.11
c = 11.1
' (mathematically: 10*1.11=11.1)
debug.print a*b = c
Run Code Online (Sandbox Code Playgroud)
我得到的是False(不正确),而不是True(正确)。
我知道这种错误是由于二进制计数方式而发生的,因此我必须忍受它。
问题是:使其正常工作的最佳方法是什么?
将数字与小数进行比较时,以下是否是我们应该使用的最佳解决方案?可靠吗?
round(a*b,2) = round(c,2)
Run Code Online (Sandbox Code Playgroud)
当.1涉及到浮点运算时,几乎永远不会正确。原因是.1无法将表示为的1/2^n16位数字之内n。
这些是一些数字,使用浮点数不会出现问题,因为它们可以表示为1/2^n:
因此,十进制类型可以解决该问题。这是最好的方法:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |