【发布时间】:2018-07-31 11:11:49
【问题描述】:
所以我有 2 个不同的查询,并且都有一个浮点数作为标准。 一个在应该返回的时候什么也不返回,另一个返回正确的值。
SELECT *
FROM filters
WHERE hole = 0.7
什么都不返回
SELECT *
FROM filters
WHERE ek = 66
返回
'143987', '1', '14', '45', '0.7', '66', '0'
0.7 符合预期。
但是下面
SELECT *
FROM needles
WHERE needle_dia = 2.5
返回
'2', 'H1004', '300', '2.5', '2040173', '2040177'
我已检查它们是否具有完全相同的类型 - 无符号 FLOAT,不是非空,默认表达式 NULL。
这有什么原因吗?
我知道可以使用 DECIMAL 代替 FLOAT 的面孔,但我宁愿避免使用它。
【问题讨论】:
-
浮点数是近似值。我猜 .7 并没有完全存储为 .7 并且 where 条件会将 .7 转换为不同的浮点值..
-
'进行浮点数比较的正确方法是首先确定数字之间差异的可接受容差,然后与容差值进行比较' - dev.mysql.com/doc/refman/8.0/en/problems-with-float.html
-
非常感谢。我会看看这些来源。
-
问题的一个可能原因是数据库中的值不完全等于
2.5或0.7表示的值,而是显示为“2.5”和“0.7”,因为有限的数字用于显示它们。在这种情况下,搜索确切的值会起作用。您必须更全面地显示这些值才能看到它们的真实值。
标签: mysql floating-point