Visual FoxPro的以下行为使我感到困惑。
CREATE TABLE test_17 (A C(2), B N(10,2))
CREATE TABLE test_18 (A C(2), B N(20))
INSERT INTO test_17 values ('C1', 1037.60)
INSERT INTO test_17 values ('C2', 2411.50)
INSERT INTO test_18 VALUES ('C1', 1037600)
INSERT INTO test_18 VALUES ('C2', 2411500)
以下查询
SELECT * FROM test_17 a, test_18 b WHERE a.A = b.A AND a.B*1000 = b.B
仅返回 C2 行,而不返回 C1 行,而
SELECT * FROM test_17 a, test_18 b WHERE a.A = b.A AND a.B*1000 <> b.B
未按预期返回什么,并且
SELECT IIF(a.B*1000 = b.B,'T','F') FROM test_17 a, test_18 b WHERE a.A = b.A
按预期返回 T ,“ T”。
有人可以向我解释为什么 Visual FoxPro 会这样吗?谢谢。
答案 0 :(得分:2)
尝试 int(a.B * 1000)= b.B
在所有数字设备中,浮点数都是一个近似值,它们的比较只是一个猜测。