0
我有以下SQL查詢在MySQL:耐人尋味的sql查詢(不選)
SELECT *
FROM _t_test
WHERE pret NOT
IN (2.6700, 2.6560, 1.8200)
我希望與中顯示不是值1.8200的行,但我仍然得到它們。 我錯過了什麼嗎? 字段「pret」是雙倍(16,4)。
我有以下SQL查詢在MySQL:耐人尋味的sql查詢(不選)
SELECT *
FROM _t_test
WHERE pret NOT
IN (2.6700, 2.6560, 1.8200)
我希望與中顯示不是值1.8200的行,但我仍然得到它們。 我錯過了什麼嗎? 字段「pret」是雙倍(16,4)。
這是舍入誤差。雙精度不是一個確切的值,所以1.8200並不完全表示,所以這些值不完全相同。
對於MySQL浮點,看到http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
做浮點數比較正確的做法應該是先 上的數字 之間的差異在可接受的公差決定,然後做與容差的比較值。例如,如果我們同意浮點數應該被認爲是相同的,如果它們在一萬分之一(0.0001)的精度內相同,則應該寫入 比較來發現大於 容差值的差異
見http://en.wikipedia.org/wiki/Double_precision_floating-point_format
謝謝你,我知道了。 http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html –
你能接受這個答案嗎? –