2011-08-05 9 views
0

私は、MySQLで次のSQLクエリがあります。魅力的なSQLクエリ

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

を私が示した、まだ私はまだそれらを得るべきではない値1.8200で行を期待します。 何か不足していますか? "pret"フィールドはdouble(16,4)です。

答えて

5

これは丸め誤差です。 doubleは正確な値ではないので、1.8200は正確には表現されないので、値はまったく同じではありません。 MYSQL浮動点について

、浮動小数点数の比較を行うための正しい方法は、最初 に、次に数字 との間の差を許容誤差を決定さhttp://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html

が許容範囲との比較を行う参照値。たとえば、 が1万(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

この回答を受け入れることはできますか? –

関連する問題