这可能很简单,但我无法得到答案。 我需要从表
中选择浮点值示例表: -
value
10.2
4.5
4.6
4.06
我的查询
SELECT * FROM table where value = '4.6'
返回空结果集
我该怎么解决这个问题!
答案 0 :(得分:16)
通常,您永远不应该检查与浮点数的相等性(除非您可能具有相同的对象)。在内部,它表现得更精确,即使它在输出到屏幕时没有显示给你。这个基本原则适用于一般的计算。
有很多方案可以做到这一点,但这里有一个简单的方案,这应该是有道理的:
SELECT * FROM table where value BETWEEN 4.599 AND 4.601
答案 1 :(得分:12)
使用decimal
代替float
。
十进制(10,2)将具有2个且仅有2个小数位,并且可以与整数相同的方式进行比较。 特别是对于monetairy值,你应该总是使用小数,但是在不需要舍入错误的地方,十进制是一个不错的选择。
请参阅:http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html
答案 2 :(得分:7)
今天,我也遇到了同样的情况,只是通过使用MySQL的FORMAT函数得到解决,它将返回与WHERE子句完全匹配的结果。
SELECT * FROM yourtable WHERE FORMAT(`col`,2) = FORMAT(value,2)
说明:
FORMAT('col name',precision of floating point number)
希望它有所帮助。
答案 3 :(得分:0)
您也可以尝试查询
SELECT * FROM table WHERE value LIKE 4.6;
答案 4 :(得分:-3)
SELECT * FROM table where round(value, 1) = 4.6