理解浮点计数器

use*_*635 1 java

我有以下简单的代码:

for (float i=0; i<1f; i+=0.1) {
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

我刚刚得到以下结果:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
Run Code Online (Sandbox Code Playgroud)

但我无法理解为什么会这样.拜托,我希望你能告诉我.谢谢.

Mic*_*rdt 8

浮点指南:

为什么我的数字,如0.1 + 0.2加起来不是很好的一轮0.3,而是我得到一个奇怪的结果,如0.30000000000000004?

因为在内部,计算机使用的格式(二进制浮点)无法准确地表示0.1,0.2或0.3之类的数字.

编译或解释代码时,"0.1"已经四舍五入到该格式中最接近的数字,即使在计算发生之前也会导致小的舍入误差.