为什么0.3 - (3 * 0.10)= 5.4411512312578E-17?

时间:2014-04-25 01:40:30

标签: c#

我真的很困惑。我的代码:

        Console.WriteLine(myChanges + " TEN METHOD " +  (ten_num * TEN));(This for debug)
        if ((myChanges - (ten_num * TEN)) >= 0)
        {

        }else
            print error message

喜欢myChannges = 0.3; TEN = 0.1; ten_num = 3,但是当我打印(myChanges - (ten_num * TEN))时 它等于5.4411512312578E-17

为什么不是0?任何解决方案?

2 个答案:

答案 0 :(得分:11)

这是由于浮点运算固有的舍入误差。 有关详细信息,请参阅http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

答案 1 :(得分:1)

正如已经回答的那样,浮点/双打有舍入错误。要解决这个问题,您可以考虑使用BigDecimal对象或BigInteger对象。它们更慢但更准确。此外,它们基本上可以保留任意数量的数字。