『mysql』の小数点に弄ばれる…
たとえば、こんなコマンド。
select * from sample where f_percent=57.96;
で、ヒットしない…。
あれ?
update sample set f_percent=57.96 where id=1;
とか、強制的に入れても…
select * from sample where f_percent=57.96;
で、検索しても、出てこない…。
何故に?
人に相談してみました…。
その人も同じように検索できないでいました…。
所が、「これなら検索できるよ。」と出してきたのがこれ。
select * from sample where cast(f_percent as char)='57.96';
おお!
文字列にキャストですかぁ!!!
これは、凄い!!!(笑)
色んな意味で…。
これで、検索できるので良しとしよう!(爆)
しかし、何で検索できないんでしょうかね?
その辺の疑問の答えは、こちらにあった。
浮動小数点数は、近似値であり正確な値として格納されないため、
混乱の原因となることがあります。SQL ステートメントで出力され
る浮動小数点値は、内部で表された値と同じではないことがあります。
比較で浮動小数点値を正確な値として扱おうとすると、
問題となることがあります。これらはまた、プラットフォームまたは
実装の依存関係にも従います。FLOAT データ型および DOUBLE データ型では、
これらの問題が発生することがあります。DECIMAL カラムの場合、MySQL は
演算を 65 桁 (10 進数) の精度で実行するため、ほとんどの一般的な精度の
問題が解決されます。
つまり、イコールは、使うなと言っている訳ですね!
なら、文字列にキャストするのは、有効化も。
知っていると得するかも?(笑)
2018年10月7日追記----------------
このネタを書いたのは、実は、『Windows』版の『Xampp』だと
select * from sample where f_percent=57.96;
で検索できたのだ…。
それを前提で処理を作成したのだが…
でも『Linux』版の『Xampp』だと検索できない。
正直何で?
って思ったりして…。
微妙な違いって困りものです…。
| 固定リンク
コメント