浮动和双重问题混淆 - Java [重复]
Posted
技术标签:
【中文标题】浮动和双重问题混淆 - Java [重复]【英文标题】:Float and Double question confusion - Java [duplicate] 【发布时间】:2021-08-09 19:17:49 【问题描述】: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);
这显示输出为 2243.95
如果我改变了
double salary = (float)(basicPay + hra + basicPay*(percentage/100));
现在的答案是 2243.949951171875
为什么会这样?
【问题讨论】:
【参考方案1】:这是与 Java 无关的问题,而是与浮点数标准及其精度有关的问题。并非所有数字都可以用float
表示。浮点将获得一个与浮点格式的实际值最接近的值,而不是精确值。 double
有更多字节来存储数据,因此更精确。
我不会解释整个事情,因为我相信有很多资源可以很好地解释它,google floating point precision
。
【讨论】:
Java 在这里负部分责任;其默认输出 2243.95 不显示计算的真实值。如果是这样,人们会更清楚这两种计算都包含舍入误差。以上是关于浮动和双重问题混淆 - Java [重复]的主要内容,如果未能解决你的问题,请参考以下文章