浮点和双问题混淆-Java

浮点和双问题混淆-Java,java,floating-point,double,primitive-types,Java,Floating Point,Double,Primitive Types,现在的答案是2243.949951171875 为什么会发生这种情况?这个问题与Java无关,而是与浮点数的标准及其精度有关。并非所有数字都可以用浮点数表示。浮点将得到一个最接近浮点格式的实际值的值,而不是精确值double有更多的字节来存储数据,因此更精确 我不打算解释整件事,因为我相信有很多资源可以很好地解释这件事,谷歌浮点精度Java对此负有部分责任;其默认输出2243.95不显示计算的真实值。如果是这样的话,人们会更清楚地看到,这两种计算都包含舍入误差。 double basicPay

现在的答案是2243.949951171875


为什么会发生这种情况?

这个问题与Java无关,而是与浮点数的标准及其精度有关。并非所有数字都可以用
浮点数表示。浮点将得到一个最接近浮点格式的实际值的值,而不是精确值
double
有更多的字节来存储数据,因此更精确


我不打算解释整件事,因为我相信有很多资源可以很好地解释这件事,谷歌
浮点精度

Java对此负有部分责任;其默认输出2243.95不显示计算的真实值。如果是这样的话,人们会更清楚地看到,这两种计算都包含舍入误差。
double basicPay = 1999.0;
        double hra = 145.0;
        float experience = 3.0f;
        double percentage;
        if(experience<3)percentage = 0;
        else if(experience>=3 && experience<5)percentage = 5;
        else if(experience>=5 && experience<10)percentage = 7;
        else percentage = 12;
        double salary = (basicPay + hra + basicPay*(percentage/100));
        System.out.println(salary);
double salary = (float)(basicPay + hra + basicPay*(percentage/100));