【问题标题】:Java precision during division and multiplication alterneting process [duplicate]除法和乘法交替过程中的Java精度[重复]
【发布时间】:2011-12-06 18:06:22
【问题描述】:

可能重复:
How to resolve a Java Rounding Double issue

请帮忙, 我用Java编写了一些计算器。我使用双重类型。 Double 在小数点后有 15 位。我有以下问题:

1/3 * 3 = 0.9999999999999999

我需要 1/3 * 3 = 1

我该如何解决这个问题? 我将结果保持在 Double 中。其他数学运算也有同样的问题,例如

sqrt(6) = 2.449489742783,然后我将结果平方得到:5.999999999999999

【问题讨论】:

    标签: java double precision division multiplication


    【解决方案1】:

    您正在处理浮点运算的固有限制。

    【讨论】:

      【解决方案2】:

      某些数字不能用二进制浮点数精确表示。 1/3 就是其中之一。请参阅http://en.wikipedia.org/wiki/Floating_point 就此而言,1/3 也不能完全用十进制表示。

      您的计算器应该使用java.text.NumberFormat 来显示数字。

      【讨论】:

        【解决方案3】:

        您看到这个的原因是计算机无法理解无穷大。

        计算机有局限性,所以它不理解 1/3 是永无止境的事实。这会导致它变圆。这可以通过上面发布的 Jason S 解决。使用这些特殊的类,人们已经开始编写程序来计算某个事物是否会趋于无穷大,然后尝试处理它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-03-03
          • 1970-01-01
          • 1970-01-01
          • 2020-08-28
          • 2011-09-22
          • 1970-01-01
          • 2016-03-13
          相关资源
          最近更新 更多