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