ホームページ > データベース > mysql チュートリアル > MySQL の浮動小数点比較が不正確なのはなぜですか?

MySQL の浮動小数点比較が不正確なのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-10 21:42:02
オリジナル
784 人が閲覧しました

Why are Floating-Point Comparisons in MySQL Inaccurate?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート