我尝试创建值数组时出现截断错误

时间:2014-02-08 08:13:06

标签: java

我想创建一个间隔为0.2的值数组 我用了代码:

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);

    }

}

}

现在我得到的输出是:

-0.8
-0.6
-0.40000004
-0.20000003
-2.9802322E-8
0.19999997
0.39999998
0.59999996
0.79999995
0.99999994

而我想要的输出是

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

我该怎么办?

3 个答案:

答案 0 :(得分:5)

浮点数只能达到一定的精度。对于float,它是6-7位有效数字,对于double,它是15-16位有效数字。由于二进制表示,像0.1这样的简单小数部分无法准确表示。

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

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

答案 1 :(得分:5)

如果您不想要浮点运算,则不要使用浮点类型。 FloatDouble不是Java核心库中唯一的非整数Number。您正在做的是BigDecimal

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);
        }
    }
}

答案 2 :(得分:0)

您可以使用类似

的内容
new DecimalFormat("#.#").format(0.19999997); //"0.2"