递增和显示双值时显然不精确

时间:2012-05-16 17:00:27

标签: java double

  

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

有人能说清楚吗?如果这是一个错误,什么是在代码中修复它的最佳方法?任何神奇的解决方法?

2 个答案:

答案 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时,它会补偿表示错误,所以你看不到它。当您对浮点值执行多个算术运算时,您可能会添加舍入误差,这很明显(要纠正的很多)