MySQL 浮動小数点比較の問題
浮動小数点数は本質的に不正確であるため、MySQL での浮動小数点比較で問題が発生しています。バイナリで表現される方法に影響します。これにより、等しいはずの値を比較するときに予期しない結果が生じる可能性があります。
次の例を考えてみましょう:
SELECT COUNT(*) FROM `users` WHERE `points` > "12.75"
ポイントを含む行が 2 つあるため、このクエリは 2 を返すと予想されます。 12.75より大きい。ただし、浮動小数点数は限られたビット数で表されるため、丸め誤差が生じるため、3 が返されます。
専門家は、金融計算やその他のアプリケーションでは、FLOAT または DOUBLE の代わりに DECIMAL データ型を使用することを推奨しています。精度は非常に重要です。 DECIMAL は値を固定小数点数として格納し、浮動小数点数で発生する可能性のある丸め誤差を排除します。
説明のために、ポイント列を FLOAT から DECIMAL に変換してみましょう。
ALTER TABLE `users` MODIFY COLUMN `points` DECIMAL(6,2)
ここで、クエリを再度実行すると、期待どおりの結果 2 が得られます。
以上がMySQL の浮動小数点比較が不正確になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。