Java使用double计算停车罚款时代码输出结果异常问题求助
问题原因
你编写的CalculateFine方法全程使用int类型做数值运算,Java的整数运算会直接截断小数部分,不会保留浮点结果,因此计算出来的滞纳金会丢失小数位,和预期结果不符。
比如当本金为12元时,单日10%滞纳金应为1.2元,但你的代码中10*12/100的运算结果是1,直接丢失了0.2元的部分,逾期天数越多偏差越大。
修复方法
修改计算逻辑,将运算过程升级为浮点型计算即可,修正后的方法代码如下:
public double CalculateFine(int finePrice, int daysLate) { // 用浮点型计算,避免整数截断 double dailyFee = finePrice * 0.1; double totalLateFee = dailyFee * daysLate; return totalLateFee; }
如果要保留你原来的百分比写法,只需要将其中一个操作数改为浮点型即可触发自动类型提升:
// 等效写法,10.0为double类型,整个运算链路会自动升级为double运算 double percentAmount = 10.0 * finePrice / 100; double amountToCharge = percentAmount * daysLate; return amountToCharge;
其他注意事项
你当前贴出的类代码中还有其他不匹配的问题,若不是复制粘贴失误建议同步修正:
- 类名为
Fines,但构造方法名写为Database,不符合Java类构造方法命名规则 - 构造方法中用到的
books、name变量未在类中定义,你当前定义的成员变量是fines和test
内容的提问来源于stack exchange,提问作者user17349337
相关产品推荐
相关产品推荐

