ホームページ  >  記事  >  バックエンド開発  >  mysqlのfloat型は非常に奇妙で、2つの値は等しくありません

mysqlのfloat型は非常に奇妙で、2つの値は等しくありません

WBOY
WBOYオリジナル
2016-06-23 13:33:001159ブラウズ

テーブルには多くのデータがありますが、フィールドは float 型で、2 つの値は同じです

Payment value = 299.7
feiyong value = 299.7

クエリ ステートメント: feiyong> 0 and Payment>0 and Payment
現時点ではまだクエリ可能で、この問題が発生しているのは少数のアイテムだけで、その他は正常です


ディスカッションへの返信 (解決策)

フローティングポイント数は非常に大きな数値を表すため、精度の一部が失われます
したがって、比較する場合は、差の絶対値が特定の最小値より小さい場合に 2 つの数値を等しいものとして扱う戦略を適用します
または、丸めを使用して有効な数値を取得し、それから比較してください
アプリケーションが正確な小数点以下の桁数を必要とする場合 (金融など)、DECIMAL 型を使用する必要があります

結局のところ、浮動小数点データはデータの正確性を保証できません

したがって、2 つの数値を比較するときは、差の絶対値が特定の非常に小さい数値よりも小さい場合にそれらを等しいものとして扱うという戦略を適用します
または、有効な数値を取得するために丸めを使用します。次に比較してください
アプリケーションに正確な小数点以下の桁数が必要な場合 (財務など)、DECIMAL 型を使用する必要があります


それでは、クエリ ステートメントを通常どおりにクエリできるようにするにはどうすればよいですか? ありがとうございます
です。型を DECIMAL に変更することをお勧めします

select ..., abs(Payment-feiyong) as aform ......where feiyong>0 and Payment>0having a > 1e-5

select ..., (Payment-feiyong) as aform ......where feiyong>0 and Payment>0having a > 1e-5

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