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