为什么我必须修剪一个浮点才能匹配呢?

时间:2012-11-20 03:22:29

标签: mysql

我在数据库中有一些我要搜索的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,没有前导或尾随字符。

我有点难过为什么会发生这种情况。

1 个答案:

答案 0 :(得分:2)

这是因为4.8不能用浮点数表示。您可以获得非常接近它的值,但不是确切的值。

我不完全确定修剪对它做了什么(我找不到任何指定行为的东西,也许它实际上没有定义)但我知道它正在改变值,所以你可以得到一个匹配。如果您对浮动的行为有进一步的兴趣,请阅读此http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html(尽管它不会告诉您关于修剪对它们做什么的任何信息)。