CodeLab技術ブログ

プログラミング技術まとめ

SQLで浮動小数点を検索したらヒットしない

floatで定義しているカラムに、0.1とかいれて

select * from table_name where number = 0.1

などと検索してみると・・・なぜか出てこない。

原因はというと・・・

原因は浮動小数点

原因は浮動小数点にあります。
浮動小数点は2進数であらわされるため、少数は正確な値があらわせないことがあります。
というか、ほとんどの数値は正しく表すことができません。

先にあげた例だと、データベースには0.1よりちょっと大きい値が入ってしまいます。
0.5とかなら大丈夫ですが、0.1とか2進法であらわすと半端な数値になってしまう場合は無理。
不等号で扱う分にはあまり問題にならないのですが、問題はイコールで検索する場合です。

ということで、基本的にDECIMAL型を使ったほうが良いでしょう。


コメントは受け付けていません。