Java上的奇怪循环为0.1到2

时间:2011-03-23 03:23:40

标签: java loops while-loop

我试图从0.1循环到2.0,然后将输出打印到控制台..但是我得到了类似的奇怪输出:

0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
1.0999999999999999
1.2
1.3
1.4000000000000001
1.5000000000000002
1.6000000000000003
1.7000000000000004
1.8000000000000005
1.9000000000000006
2.0000000000000004

源代码:

public class test {
    public static void main(String[] a) {
        double i = 0.1;
        while (i < 2.1)
            System.out.println(i);
            i+=0.1;
        }
    }
}

为什么不打印确切的数字而不是像0.79999999999这样的点? 使用for而不是while也有任何区别,因为我不知道怎么做0.1增量?

2 个答案:

答案 0 :(得分:4)

这很正常。它是浮点固有的;像0.3这样的数字不能以二进制形式存储为精确值,因此您会慢慢累积错误。参考文献:Python manualWikipediaTechnical explanation from Princeton CS

答案 1 :(得分:0)

这是一个错误(在你身边)。

在了解它们是什么以及它们如何工作之前,请不要使用浮点数。