« 『フェイタス』だ! | トップページ | バイク買った…w »

2018年9月30日 (日)

『mysql』の小数点に弄ばれる…

『mysql』で『float』で定義したカラムを値で検索してみた…。

たとえば、こんなコマンド。

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';

おお!

文字列にキャストですかぁ!!!

これは、凄い!!!(笑)

色んな意味で…。

これで、検索できるので良しとしよう!(爆)

しかし、何で検索できないんでしょうかね?

その辺の疑問の答えは、こちらにあった。

5.5.8 浮動小数点値に関する問題

浮動小数点数は、近似値であり正確な値として格納されないため、
混乱の原因となることがあります。SQL ステートメントで出力され
る浮動小数点値は、内部で表された値と同じではないことがあります
比較で浮動小数点値を正確な値として扱おうとすると、
問題となることがあります
。これらはまた、プラットフォームまたは
実装の依存関係にも従います。FLOAT データ型および DOUBLE データ型では、
これらの問題が発生することがあります。DECIMAL カラムの場合、MySQL は
演算を 65 桁 (10 進数) の精度で実行するため、ほとんどの一般的な精度の
問題が解決されます。

つまり、イコールは、使うなと言っている訳ですね!

なら、文字列にキャストするのは、有効化も。

知っていると得するかも?(笑)

2018年10月7日追記----------------

このネタを書いたのは、実は、『Windows』版の『Xampp』だと

select * from sample where f_percent=57.96;

で検索できたのだ…。

それを前提で処理を作成したのだが…

でも『Linux』版の『Xampp』だと検索できない。

正直何で?

って思ったりして…。

微妙な違いって困りものです…。

|

« 『フェイタス』だ! | トップページ | バイク買った…w »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック


この記事へのトラックバック一覧です: 『mysql』の小数点に弄ばれる…:

« 『フェイタス』だ! | トップページ | バイク買った…w »