【问题标题】:What is special about this math? [duplicate]这个数学有什么特别之处? [复制]
【发布时间】:2011-10-20 01:02:10
【问题描述】:

可能重复:
Java floating point arithmetic

Java 中的这种双重数学有什么特别之处?我希望 .9 - 1 的答案是 -0.1,但响应是 -0.09999999999999998

double a = 0.9;
double b = 1.0;
double c = a - b;
System.out.println(c);
>>-0.09999999999999998

【问题讨论】:

标签: java math


【解决方案1】:

浮点精度对于计算机来说很难。详情见this articleRetain precision with double in Java

如需准确的浮点运算,请使用BigDecimal

【讨论】:

    【解决方案2】:

    还有一个关于双精度的问题。 双打的精度有限。并非所有数字都可以精确表示!

    【讨论】:

      【解决方案3】:

      值 0.9 不能以二进制形式精确表示。

      【讨论】:

        【解决方案4】:

        double 不准确。这是可以用双精度表示的最接近的数字。

        尝试阅读what every programmer should know about floating point arithmetic.

        【讨论】:

          【解决方案5】:

          在任意两个值之间有无数个数字。

          任何计算机上的内存位数都是有限的。因此,我们选择表示浮点数的任何方式都不会是准确的。

          【讨论】:

          • 实际上,即使有无限但可数的内存,仍然不够,因为每两个数字之间有不可数的元素。 [所以任何图灵机永远无法精确表示一个实数]
          猜你喜欢
          • 2021-06-10
          • 2016-04-01
          • 2013-08-04
          • 2013-10-01
          • 2011-04-18
          • 2017-02-19
          • 2016-09-30
          • 2012-04-17
          相关资源
          最近更新 更多