2011-08-05 27 views
0

我有以下SQL查詢在MySQL:耐人尋味的sql查詢(不選)

SELECT * 
FROM _t_test 
WHERE pret NOT 
IN (2.6700, 2.6560, 1.8200) 

我希望與中顯示不是值1.8200的行,但我仍然得到它們。 我錯過了什麼嗎? 字段「pret」是雙倍(16,4)。

回答

5

這是舍入誤差。雙精度不是一個確切的值,所以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

+0

謝謝你,我知道了。 http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html –

+0

你能接受這個答案嗎? –