0

我用java写下面的代码

双刻度=1.0;
for(int i=0;i<6;i++){
    比例=比例/10;
}
System.out.println(规模);

现在输出的是 1.0000000000000002E-6 这似乎是不正确的,但是如果我循环 5 次,那么输出是正确的,如下
1.0E-5

任何人都可以告诉我这是为什么以及如何删除它。

4

3 回答 3

2

这是floating point精度问题。使用BigDecimal而不是double.

    BigDecimal scale=BigDecimal.ONE;
    for (int i = 0; i < 6; i++) {
        scale = scale.divide(BigDecimal.valueOf(10));
    }
    System.out.println(scale);
于 2013-10-23T10:12:13.637 回答
0

因为即使是 0.1 也不能表示为精确的双精度值。这些错误总结并显示在结果中。

于 2013-10-23T10:12:37.853 回答
-3

改变i初始化。

double scale=1.0;
for(int i=1;i<6;i++){
    scale=scale/10;
}
System.out.println(scale);

现在我们的代码将输入 for 值 i = [1, 2, 3, 4, 5],它的 5 次

于 2013-10-23T10:11:55.497 回答