【问题标题】:Why 0.3 - (3 * 0.10) = 5.4411512312578E-17? [duplicate]为什么 0.3 - (3 * 0.10) = 5.4411512312578E-17? [复制]
【发布时间】:2014-06-10 13:25:03
【问题描述】:

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

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

        }else
            print error message

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

为什么不是 0?有什么解决办法吗?

【问题讨论】:

  • 你在用花车吗?
  • 简单回答:您给出的十进制值无法精确表示为浮点数(以 2 为基数)。
  • 谢谢大家~我明白了!

标签: c#


【解决方案1】:

正如已经回答的那样,浮点数/双精度数存在舍入错误。为了解决这个问题,您可以考虑使用 BigDecimal 对象或 BigInteger 对象。它们速度较慢但更准确。另外,它们基本上可以容纳任意数量的数字。

【讨论】:

    【解决方案2】:

    这是由于浮点运算固有的舍入误差造成的。 详情请见http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 2012-01-26
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2020-12-29
      • 2016-05-13
      • 2016-03-08
      • 1970-01-01
      相关资源
      最近更新 更多