迷人的SQL查询(不在select中)

时间:2011-08-05 07:12:54

标签: mysql sql

我在mysql中有以下sql查询:

SELECT * 
FROM _t_test
WHERE pret NOT 
IN ( 2.6700, 2.6560, 1.8200 ) 

我希望不会显示值为1.8200的行,但我仍然会得到它们。 我错过了什么吗? 字段“pret”是double(16,4)。

1 个答案:

答案 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