ホームページ  >  記事  >  データベース  >  MySQL が浮動小数点値の比較に苦労するのはなぜですか?

MySQL が浮動小数点値の比較に苦労するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-07 19:47:03951ブラウズ

Why Does MySQL Struggle with Comparing Floating-Point Values?

浮動小数点値の比較における 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」が返されます。

追加の考慮事項

  • デフォルトを使用しますNULL 値を避けて、浮動小数点列のデフォルト値を指定するキーワード。
  • 丸め誤差を軽減するために、比較を実行する前に ROUND() または TRUNCATE() 関数の使用を検討してください。

以上がMySQL が浮動小数点値の比較に苦労するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。