我无法在Excel VBA中比较2个双倍
假设我有以下代码
Dim a as double Dim b as double a = 0.15 b = 0.01
在对b进行一些操作之后,b现在等于0.6
然而,与双数据类型相关的不精确让我很头疼,因为
if a = b then //this will never trigger end if
你知道我怎么能删除双重类型的尾随不精确?
您无法比较浮点值是否相等.有关如何处理内部错误的讨论,请参阅本文" 比较浮点数 ".
它不像比较恒定的误差范围那么简单,除非你事先知道浮点数的绝对范围.
如果你要这样做....
Dim a as double Dim b as double a = 0.15 b = 0.01
你需要在你的IF语句中添加圆函数,就像这样......
If Round(a,2) = Round(b,2) Then //code inside block will now trigger. End If
另请参阅此处以获取其他Microsoft参考.
比较平等的双打是不明智的.
某些十进制值映射到多个浮点表示.因此,一个0.6并不总是等于另一个0.6.
如果我们从另一个中减去一个,我们可能得到类似于0.00000000051的东西.
我们现在可以将等式定义为具有小于某个误差容限的差异.
这是我写的一个简单的函数:
Function dblCheckTheSame(number1 As Double, number2 As Double, Optional Digits As Integer = 12) As Boolean If (number1 - number2) ^ 2 < (10 ^ -Digits) ^ 2 Then dblCheckTheSame = True Else dblCheckTheSame = False End If End Function
称之为:
MsgBox dblCheckTheSame(1.2345, 1.23456789) MsgBox dblCheckTheSame(1.2345, 1.23456789, 4) MsgBox dblCheckTheSame(1.2345678900001, 1.2345678900002) MsgBox dblCheckTheSame(1.2345678900001, 1.2345678900002, 14)