可能重复:
Retain precision with Doubles in java
Moving decimal places over in a double
课程说明了一切。如果你执行这个代码,双值似乎有点溢出,但是对于所有值都没有发生,此外,如果直接打印数字,输出就可以了。
public class test {
public static void main(String[] args){
for (double f=1.36; f<1.40; f+=0.01) System.out.println(f);
//Prints 1.36
// 1.37
// 1.3800000000000001 ???????
// 1.3900000000000001 ???????
System.out.println(1.36); //Prints 1.36
System.out.println(1.37); //Prints 1.37
System.out.println(1.38); //Prints 1.38
System.out.println(1.39); //Prints 1.39
}
}
有人能说清楚吗?如果这是一个错误,什么是在代码中修复它的最佳方法?任何神奇的解决方法?
答案 0 :(得分:2)
如果像这样格式化打印输出,则不会看到所有小数位:
System.out.printf("%.2f",yourVariable);
答案 1 :(得分:1)
尝试
for (int i= 136; i <= 140; i++)
System.out.println(i / 100.0);
打印
1.36
1.37
1.38
1.39
1.4
当你打印出一个double时,它会补偿表示错误,所以你看不到它。当您对浮点值执行多个算术运算时,您可能会添加舍入误差,这很明显(要纠正的很多)