You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中Else语句计算结果异常:图书馆逾期罚款计算程序问题求助

解决图书馆逾期罚款计算的逻辑错误

嗨,我看到你作为JavaScript新手在开发逾期罚款程序时遇到了结果错误的问题,这是个很容易踩的条件判断小坑,咱们一起来搞定它!

问题根源

你的代码里的else if条件用错了逻辑运算符:

else if (daysLate >= 6 || daysLate <= 10)

这里的||是“或”运算符,意思是只要满足其中一个条件就会执行分支。但任何天数都会满足daysLate >=6或者daysLate <=10(比如11天满足>=6,4天满足<=10),所以当逾期11天时,程序会错误地进入这个分支,计算11*0.65=7.15英镑,而不是进入最后一个else分支。

修正后的代码

把||改成&&(“且”运算符),这样才能准确匹配6到10天的区间:

const daysLate = 11;
const totalOne = daysLate * 0.40;
const totalTwo = daysLate * 0.65;
const totalThree = daysLate * 0.80;
if (daysLate <= 5) {
    console.log(`Your fine is £${totalOne}`)
} else if (daysLate >= 6 && daysLate <= 10) { // 这里把||换成&&
    console.log(`Your fine is £${totalTwo}`)
} else {
    console.log(`Your fine is £${totalThree}`)
}

现在运行代码,逾期11天时会输出Your fine is £8.8,完全符合预期。

额外优化建议(可选)

其实不需要提前计算三个total,咱们可以在条件分支里直接计算,这样代码更简洁,也避免不必要的计算:

const daysLate = 11;
let fine = 0;
if (daysLate <= 5) {
    fine = daysLate * 0.40;
} else if (daysLate >= 6 && daysLate <= 10) {
    fine = daysLate * 0.65;
} else {
    fine = daysLate * 0.80;
}
console.log(`Your fine is £${fine.toFixed(2)}`); // toFixed(2)保证输出两位小数,更符合货币格式

toFixed(2)还能让输出的金额保持两位小数,比如8.8会变成8.80,更贴合英镑的显示习惯~

内容的提问来源于stack exchange,提问作者Charlotte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 05:19:09