我有一个比较值的查询。两个值都相等。数据类型是双倍的。但是,结果总是错误的。你遇到过同样的情况吗?
我尝试在比较数据之前对数据进行舍入,得到了正确的结果。您认为这个问题的原因是什么?
答案 0 :(得分:1)
这是浮动数字的众所周知的副作用。
您有几种选择。测试差异或转换为其他数据类型:
Where Abs(Field1 - Field2) < 0.00001 (or whatever value you consider equal)
Where CCur(Field1) = CCur(Field2)
Where CDec(Field1) = CDecCur(Field2)
答案 1 :(得分:0)
确认两个变量的值相等。我认为Double是浮点数,精度为15。如果您的显示器显示带有舍入的双变量,它们可能看起来相等但实际上它们可能不相等。
我建议您Round(variable1, 4)
并将其与Round(variable2, 4)
进行比较。尝试使用如下测试例程测试变量:
Public Sub SendDoubles()
Dim a As Double
Dim b As Double
a = 10.0000000001
b = 10.000000001
TestDoubles a, b
End Sub
Public Sub TestDoubles(a As Double, b As Double)
MsgBox CStr(a) & vbCrLf & CStr(b)
MsgBox a = b
MsgBox Round(a, 4) = Round(b, 4)
End Sub
请注意,CStr
会将您的double转换为字符串,以便您可以显示这两个变量的值。第二个MsgBox尝试按原样比较它们,第三个将它们与舍入进行比较。