-1

可能的重复:
在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
    }
}

有人可以解释一下吗?如果这是一个错误,那么在代码中修复它的最佳方法是什么?有什么神奇的解决方法吗?

4

2 回答 2

2

如果您像这样格式化打印输出,您将看不到所有这些小数位:

System.out.printf("%.2f",yourVariable);
于 2012-05-16T17:06:56.367 回答
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 时,它​​会补偿表示错误,因此您看不到它。当您对浮点值执行多个算术运算时,您可能会增加舍入误差,这变得很明显(需要纠正很多)

于 2012-05-16T17:18:10.253 回答