我用java写下面的代码
双刻度=1.0; for(int i=0;i<6;i++){ 比例=比例/10; } System.out.println(规模);
现在输出的是
1.0000000000000002E-6
这似乎是不正确的,但是如果我循环 5 次,那么输出是正确的,如下
1.0E-5
任何人都可以告诉我这是为什么以及如何删除它。
我用java写下面的代码
双刻度=1.0; for(int i=0;i<6;i++){ 比例=比例/10; } System.out.println(规模);
现在输出的是
1.0000000000000002E-6
这似乎是不正确的,但是如果我循环 5 次,那么输出是正确的,如下
1.0E-5
任何人都可以告诉我这是为什么以及如何删除它。
这是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);
因为即使是 0.1 也不能表示为精确的双精度值。这些错误总结并显示在结果中。
改变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 次