【问题标题】:Floating point number representation, Java example [duplicate]浮点数表示,Java 示例 [重复]
【发布时间】:2013-12-09 12:00:16
【问题描述】:

你能解释一下,为什么我得到下一个结果:

当我运行这个时:

System.out.println((0.2 - 0.1));

我得到:0.1

当我运行这个时:

System.out.println((0.3 - 0.2));

我得到:0.09999999999999998

我知道数字“0.1”在二进制中没有有限表示,但它没有解释上面的结果。这很可能与特定语言无关,而是与数字在计算机中的存储方式有关。

【问题讨论】:

  • 从标题中删除了“无理数”,因为“无理数”一词具有特定含义,与问题无关。

标签: java floating-point numbers


【解决方案1】:

Java 使用 IEEE floating point 来表示 double 值。这不是一个精确的表示,并且某些计算会导致以这种方式表现出来的微小错误。

【讨论】:

    【解决方案2】:

    我同意上面的波西米亚语(floatdouble 不准确)所以你会得到这样的奇怪

    但是有一个解决您的问题的方法:

    NumberFormat nf = NumberFormat.getInstance();
    nf.setMaximumFractionDigits(1);
    nf.format(0.3f - 0.2f);
    

    这将产生0.1

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 2013-08-10
      • 2011-02-09
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      相关资源
      最近更新 更多