java中的错误计算

java中的错误计算,java,math,sum,double,Java,Math,Sum,Double,当我试图得到14.99+1.5和15.99+1.5的答案时,我的程序给了我意想不到的不同输出。有什么原因吗 以下是我的简单程序: class Demo { public static void main(String[] args) { System.out.println(12.99 + 1.5); System.out.println(13.99 + 1.5); System.out.pri

当我试图得到14.99+1.5和15.99+1.5的答案时,我的程序给了我意想不到的不同输出。有什么原因吗

以下是我的简单程序:

class Demo {
    public static void main(String[] args) {

        System.out.println(12.99 + 1.5);           
        System.out.println(13.99 + 1.5);           
        System.out.println(14.99 + 1.5);           
        System.out.println(15.99 + 1.5);           
        System.out.println(16.99 + 1.5);           

    }
}
以下是输出:

我的JDK版本:1.7.025

我的程序给了我错误的输出

这是double的正确输出,只是不是您所期望的

浮点近似于它不能准确表示的值。在这种情况下,1.5精确地表示为两个2^0+2^-1的和或幂,但需要近似表示为12.99。打印浮点numebr时,它知道该数字是近似值,需要四舍五入到最简单的数字,即14.49恰好符合您的预期。14.99+1.5的值有点太小,您会看到表示错误,即取消了精确值的错觉

当您使用浮点运算时,您还需要提供预期的舍入值,并且您将在一定范围内得到预期的结果。舍入时,非常大的数字仍然是错误的,因为double的精度有限

    System.out.printf("%.2f%n", 12.99 + 1.5);           
    System.out.printf("%.2f%n", 13.99 + 1.5);           
    System.out.printf("%.2f%n", 14.99 + 1.5);           
    System.out.printf("%.2f%n", 15.99 + 1.5);           
    System.out.printf("%.2f%n", 16.99 + 1.5);
印刷品

 14.49
 15.49
 16.49
 17.49
 18.49

不出所料。

@Down选民关心说什么吗?严重地降低投票率??如果我知道原因,我不会问这个问题,这是我第一次体验这种输出。事实上,我不知道已经有同样的问题了,它的标题和我的完全不同。因此,在寻找解决方案时,我看不到这个问题。谢谢你的理解。。