MySQL 浮動小数点比較の課題
MySQL ユーザーは、浮動小数点値を比較するときに不正確な問題に遭遇することがよくあります。次の例を考えてみましょう。
CREATE TABLE users (points float);
INSERT INTO users VALUES (50.12); INSERT INTO users VALUES (34.57); INSERT INTO users VALUES (12.75);
クエリ SELECT COUNT(*) FROM users WHERE ポイント > "12.75" は、カウントが 2 であると予想されているにもかかわらず、3 を返します。
浮動小数点演算の問題
MySQL は浮動小数点演算を使用して float 型を格納および操作します価値観。このシステムは仮数部 (実際の数値) と指数の組み合わせを使用して数値を表すため、精度の問題が発生する可能性があります。たとえば、値 12.75 は、浮動小数点数のバイナリ表現により、MySQL に入力されると 12.75000005722 として格納される場合があります。
正確な 10 進表現
このようなことを回避するには不正確な場合があるため、正確な 10 進数表現のために MySQL で DECIMAL データ型を使用することをお勧めします。 float とは異なり、DECIMAL は値を固定小数点数として保存し、正確な精度を保証します。
DECIMAL への変換
既存の float 列を DECIMAL に変換するには、ALTER TABLE を使用します。ステートメント:
ALTER TABLE users MODIFY points DECIMAL(6,2);
これは、ポイントを合計 6 桁と小数点以下 2 桁の 10 進数列に変換します。必要に応じて精度とスケールを調整できます。
結論
float は便利に見えるかもしれませんが、浮動小数点演算に固有の不正確さにより、比較時に予期しない結果が生じる可能性があります。価値観。正確な 10 進数表現と正確な比較を行うには、MySQL で DECIMAL データ型を使用することを強くお勧めします。 DECIMAL を使用すると、浮動小数点比較の潜在的な落とし穴を回避し、データの信頼性を確保できます。
以上がMySQL の浮動小数点比較が不正確なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。