关于java:Truncation当我尝试创建值数组时出错

Truncation Error when I try to create a Array of values

本问题已经有最佳答案,请猛点这里访问。

我希望创建一个间隔为0.2的值数组我用的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TrialCode {

public static void main(String[] args) {

    float a = -1.0f, b = 0.2f;

    for (int i = 0; i <10; i++) {
        a = a + b;
        System.out.println(a);

    }

}

}

现在我得到的结果是:

1
2
3
4
5
6
7
8
9
10
-0.8
-0.6
-0.40000004
-0.20000003
-2.9802322E-8
0.19999997
0.39999998
0.59999996
0.79999995
0.99999994

而我想要的输出是

1
-0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1.0

我该怎么办?


如果不需要浮点运算,则不要使用浮点类型。EDCOX1,0,EDCX1,1 }不是Java核心库中唯一的非完整EDCOX1×4的s。你所做的一切都需要BigDecimal

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.math.BigDecimal;

public class TrialCode {

    public static void main(String[] args) {

        BigDecimal a = new BigDecimal("-1.0");
        BigDecimal b = new BigDecimal("0.2");

        for (int i = 0; i < 10; i++) {
            a = a.add(b);
            System.out.println(a);
        }
    }
}

浮点数只能达到一定的精度。对于float为6-7位有效数字,对于double为15-16位有效数字。由于采用了二进制表示,所以像0.1这样的简单小数不能精确表示。

您可以舍入输出以获得所需的结果:

1
System.out.printf("%.1f", a);


你可以用类似的东西

1
new DecimalFormat("#.#").format(0.19999997); //"0.2"