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
相关产品推荐
相关产品推荐

