ふそうごむ。by扶桑ゴム産業

扶桑ゴム産業の最新情報とうぇぶますたあ「TKYK」の個人的日記。

0.8 ≠ 0.8 ?

MySQLでいろいろやっている途中、不思議な現象に。 データベースに格納されている数値は「0.8」。 比較したい数値も、「0.8」。 でも、SQLで比較しても引っかかってこない。なぜ… float型が問題?浮動小数点はあんまり好きではないけど… 調べたところ、「やっぱり」でした[:しょんぼり:] MySQLで小数点を“正確”に比較したいときは、decimal型なのね… 昔、Excelで時刻の比較をしたときのそれと同じような、2進数小数の落とし穴に入り込んでしまっていたのでありました…。 追記: しかし、0.8みたいな数値、そこまで精度が必要にならなさそうなのにねぇ…と思って、double型に変更したらうまくいきました。 ここにも書かれてあった、
MySQL の計算はすべて倍精度で行われるため、FLOAT の使用時には予期しない問題が発生する場合があることに注意する。
このあたりが問題を引き起こしていたのではないか?たぶん。 さらに:
FLOAT または DOUBLE カラムを小数と比較している場合、'=' は使用できない。浮動小数点の値は正確な値ではない。この問題は大部分のコンピュータ言語で共通。 たいていの場合、FLOAT を DOUBLE に変更すると問題は解決する。
ちゃんと書いてあった…ちゃんちゃん。