为什么浮点数似乎在Java中添加错误?

xia*_*lin -1 java math

可能的重复:
JavaScript的数学是否被破坏?
Java浮点运算

我有当前的代码

for(double j = .01; j <= .17; j+=.01){
            System.out.println(j);
        }
Run Code Online (Sandbox Code Playgroud)

输出是:

0.01
0.02
0.03
0.04
0.05
0.060000000000000005
0.07
0.08
0.09
0.09999999999999999
0.10999999999999999
0.11999999999999998
0.12999999999999998
0.13999999999999999
0.15
0.16
0.17
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么会这样吗?你是如何解决这个问题的?除了编写舍入函数?

Kal*_*see 6

浮点数是Java中实际数字的近似值,因为它们的存储方式.如果您需要精确值,请改用BigDecimal.