Почему Visual FoxPro не дает ожидаемого ответа для определенных сравнений? - PullRequest
0 голосов
/ 29 апреля 2019

Следующее поведение 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 ведет себя так? Спасибо.

1 Ответ

2 голосов
/ 08 мая 2019

Try int (a.B * 1000) = b.B

Во всех цифровых устройствах числа с плавающей запятой являются приблизительными, их сравнение является лишь предположением.

...