mysql浮点数据没有在where子句中选择

Gow*_*wri 5 mysql types

这可能是一个简单的,但我无法得到答案.我需要从表中选择浮点值

示例表: -

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

MySQL DECIMAL数据类型特征


小智 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)

希望能帮助到你.

  • 当批准的答案建议无法将列类型从float更改为十进制时,这会有所帮助. (2认同)

Zho*_*Jin 5

您也可以尝试查询

SELECT * FROM table WHERE value LIKE 4.6;
Run Code Online (Sandbox Code Playgroud)