错误的双变量递增

时间:2015-06-13 23:16:38

标签: java

我做了一个简单的代码,保持0.1加零。 这是代码:

static double num = 0;
    public static void main(String[] args) {
        num+=0.1;
        System.out.println(num);

        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        main(null);
    }
}

这是它输出的内容:

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
...

但我希望输出看起来像这样:

0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
...

为什么会这样做或者如何解决它?

3 个答案:

答案 0 :(得分:0)

尝试:

    System.out.printf("%.1f" , num);

而不是:

    System.out.println(num);

这将限制小数点右边的小数位。 如果你想要三个小数位,你可以使用%。3f

答案 1 :(得分:0)

除了已经建议使用String格式。需要注意的另一点是浮点数并不完全准确。

在Java中,您希望使用BigDecimal来准确表示这些类型的值。

答案 2 :(得分:-1)

这称为舍入错误。在涉及doublefloat类型时,这只是生活中的一个事实。如果您感到好奇,请在wiki上阅读相关内容。

如果您想要精确,可以使用BigDecimal课程。但如果数字具有无限数字,例如1/3,它将崩溃。虽然这不会成为您提供的片段中的问题。