2014-01-20 70 views
0

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

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

+0

想必这些字段不整数....如果是这样,你将会收获你播种什么! –

+1

这些字段是双倍的。 @MitchWheat –

+2

强制链接:[每个计算机科学家应该知道的关于浮点算术](http://download.oracle.com/docs/cd/E19957-01/806-3568/ncg_goldberg.html) –

回答

3

这就是所谓的近似精度。这不是一个错误,floating point数据类型旨在以这种方式工作。他们无法精确地存储数据。所以如果这很重要,你应该使用定点数据类型,例如MySQL中的DECIMAL

在另一方面,你可以随时使用精度增量为比较浮点,如:

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

,你可以看到,这里三角洲是1E-13(通常情况下,这将是足够的)

+0

实际上我必须开发一个库存管理软件。库存量可能在小数点后5位,以便我使用双精度。让我有一个在商店19.87数量的产品。当我尝试将19.87数量转移到另一家商店时,显示的数量不足以转移。现在我该如何管理它。 –

+1

为此使用'DECIMAL'。您的价值将被精确地储存 –

+0

怎样才能有“在商店中有19.87数量的产品? –