我试图从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增量?
答案 0 :(得分:4)
这很正常。它是浮点固有的;像0.3这样的数字不能以二进制形式存储为精确值,因此您会慢慢累积错误。参考文献:Python manual,Wikipedia,Technical explanation from Princeton CS。
答案 1 :(得分:0)
这是一个错误(在你身边)。
在了解它们是什么以及它们如何工作之前,请不要使用浮点数。