我在mysql中有以下sql查询:
SELECT *
FROM _t_test
WHERE pret NOT
IN ( 2.6700, 2.6560, 1.8200 )
我希望不会显示值为1.8200的行,但我仍然会得到它们。 我错过了什么吗? 字段“pret”是double(16,4)。
答案 0 :(得分:5)
这是一个舍入错误。双精度值不是精确值,因此1.8200未完全表示,因此值不完全相同。
对于MYSQL浮点,请参阅http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html
首先进行浮点数比较的正确方法 决定对数字之间差异的可接受容差 然后对公差值进行比较。例如, 如果我们同意浮点数应该被视为相同的话 它们在一万分之一(0.0001)的精度范围内相同 应该写一个比较来找到大于的差异 公差值
请参阅http://en.wikipedia.org/wiki/Double_precision_floating-point_format