我在数据库中有一些我要搜索的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,没有前导或尾随字符。
我有点难过为什么会发生这种情况。
答案 0 :(得分:2)
这是因为4.8不能用浮点数表示。您可以获得非常接近它的值,但不是确切的值。
我不完全确定修剪对它做了什么(我找不到任何指定行为的东西,也许它实际上没有定义)但我知道它正在改变值,所以你可以得到一个匹配。如果您对浮动的行为有进一步的兴趣,请阅读此http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html(尽管它不会告诉您关于修剪对它们做什么的任何信息)。