浮動小数点値の比較における MySQL の落とし穴
MySQL の浮動小数点計算では、固有の精度制限により誤った比較が発生する可能性があります。この問題に対処するには、代わりに DECIMAL 型の使用を検討してください。
浮動小数点演算の固有の不精度
浮動小数点数は限られた精度で格納されるため、わずかな精度が発生する可能性があります。計算中の不正確さ。たとえば、MySQL に float として保存されている数値 50.12 について考えてみましょう。
CREATE TABLE users (points FLOAT); INSERT INTO users (points) VALUES (50.12);
演算子 > を使用してこの値を 12.75 と比較すると、50.12 が 12.75 より大きい場合でも、MySQL は「False」を返します。
SELECT COUNT(*) FROM users WHERE points > 12.75;
DECIMAL の利点
このような不一致を回避するために、DECIMAL データ型は固定精度と位取りを提供し、計算と比較が正確であることを保証します。例:
ALTER TABLE users MODIFY COLUMN points DECIMAL(6,2); UPDATE users SET points = 50.12; SELECT COUNT(*) FROM users WHERE points > 12.75;
これで、意図したとおり、比較により「True」が返されます。
追加の考慮事項
以上がMySQL が浮動小数点値の比較に苦労するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。