1

データベースのFLOAT列に、検索したい値がいくつかあります。

不思議なことに、これを実行すると2.5の値が返されます。

SELECT * from `prices` WHERE `price` = 2.5

しかし、4.8で検索しても、次のように比較する前に列をトリミングしない限り、何も返されません。

SELECT * from `prices` WHERE trim(`price`) = 4.8

これの原因は誰でも知っているので、FLOATフィールドなので、トリミングする必要のある先頭または末尾のスペースはないはずだと思いました。4.8という数字は特別なものではないと思いますが、それでも興味をそそられます。

データベースを参照すると、先頭または末尾の文字がないプレーンな4.8として表示されます。

なぜこれが起こるのか、私は少し困惑しています。

4

1 に答える 1

2

これは、4.8 が float で表現できないためです。それに非常に近い値を取得できますが、正確な値ではありません。

トリムが何をしているのか完全にはわかりませんが(実際には定義されていない可能性があるため、動作を指定するものは何も見つかりません)、値を変更していることはわかっています。float の動作にさらに興味がある場合は、 http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.htmlをお読みください(ただし、trim が何をするかについては何も教えてくれません)彼らへ)。

于 2012-11-20T03:31:19.380 に答える