在mysql中,两个相等值的减法不为零

时间:2014-01-20 05:15:11

标签: mysql

为什么在mysql中减去两个相等的值不等于零?

两种字段类型都是双倍的。见下图 enter image description here

2 个答案:

答案 0 :(得分:3)

这被称为近似精度。这不是错误,floating point数据类型旨在以这种方式工作。它们无法精确存储数据。因此,如果这很重要,您应该使用定点数据类型,例如MySQL中的DECIMAL

另一方面,您始终可以使用精确增量来进行浮点比较,例如:

SELECT 
  `foo`,
  `bar`,
  IF(ABS(`foo`-`bar`)<1E-13, 0, `foo`-`bar`) AS zero_compared
FROM
 t

如您所见,此处delta为1E-13(通常,这就足够了)

答案 1 :(得分:1)

此问题是由浮点精度和计算引起的。 您也可以参考此问题以明确您的问题:

MySQL floating point comparison issues