Java上的奇怪循环为0.1到2

我试图从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这样的点? 因为我不知道怎么做0.1增量,所以使用for而不是while任何区别?

这个是正常的。 它是浮点固有的; 像0.3这样的数字不能以二进制forms存储为精确值,因此您会慢慢累积错误。 参考文献: Python手册 , 维基百科 , 普林斯顿CS的技术说明 。

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

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