可能的重复:
在java中使用双精度保持精度
将小数位移动到双精度
班级不言自明。如果您执行此代码,则双精度值似乎有些溢出,但并非所有值都发生这种情况,此外,如果您直接打印数字,则输出正常。
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
}
}
有人可以解释一下吗?如果这是一个错误,那么在代码中修复它的最佳方法是什么?有什么神奇的解决方法吗?