这可能是一个容易的,但我无法得到答案。 我需要从表mysql浮点数据没有选择在哪里条款
例如表中选择浮点值: -
value
10.2
4.5
4.6
4.06
我的查询
SELECT * FROM table where value = '4.6'
返回空结果集
我怎样才能解决这个!
这可能是一个容易的,但我无法得到答案。 我需要从表mysql浮点数据没有选择在哪里条款
例如表中选择浮点值: -
value
10.2
4.5
4.6
4.06
我的查询
SELECT * FROM table where value = '4.6'
返回空结果集
我怎样才能解决这个!
使用decimal
而不是float
。
小数点(10,2)将有2个且只有2个小数位,并且可以用与整数相同的方式进行比较。 特别是对于单值,你应该使用总是使用十进制,但在任何舍入误差不需要的地方,小数是一个不错的选择。
参见:http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.html
通常,您不应该使用浮动检查相等性(除非可能具有相同的对象)。在内部,它的表现更加精确,即使在它输出到屏幕时它没有显示给你。这个基本原则适用于一般的计算。
有几十个方案这样做的,但这里是一个简单的,这应该是有意义:
SELECT * FROM table where value BETWEEN 4.599 AND 4.601
非常有用的解决方案。值-0.5和值+ 0.5之间很酷 – 2014-03-19 14:28:33
任何关于精度浮点数的想法都存储在?我正在做BETWEEN(值0.000001)和(值+ 0.000001)...是否太限制? – plong0 2015-12-31 01:54:27
这个问题并不是精确的,但用数学来生成浮点数。在许多情况下,固定的epsilon(方差)很好,但是非常大(或很小)的浮点数会歪曲精度的重要性。另外,实际上微处理器之间甚至不同C编译器之间会有差异,所以没有真正的魔法/安全解决方案,特别是在像SQL这样的4GL语言中。话虽如此,如果你的数字通常在相同的范围内,你应该对上面说明的那种固定/绝对epsilon很好。 – 2016-01-06 13:39:13
今天,我也遇到了同样的情况,并得到解决只是使用MySQL的格式化功能,它会返回你的WHERE子句完全匹配的结果。
SELECT * FROM yourtable WHERE FORMAT(`col`,2) = FORMAT(value,2)
说明:
FORMAT('col name',precision of floating point number)
希望它能帮助。
这有助于在批准的答案建议时无法将列类型从float更改为decimal。 – 2017-08-30 12:55:47
你写:
SELECT * FROM table where round(value, 1) = 4.6
[MySQL中选择浮动]的可能重复(http://stackoverflow.com/questions/1302243/selecting-a-float-in-mysql) – Johan 2011-05-26 08:25:07