土耳其里拉转沙特里亚尔计算器JS代码逻辑问题求助
问题修复
错误原因
你代码里的最终价格计算用了两个独立的if语句,第二个else仅和第二个if绑定。比如当满足第一个条件(SAR×0.1 ≤5)时,代码会先给finalPrice.value赋值为SAR+5,但紧接着第二个if(SAR×0.1≥15)不成立,就会执行else分支,把finalPrice.value重新赋值为SAR×1.1,直接覆盖了之前的正确结果,导致所有情况都走1.1倍的逻辑。
另外,输入框的value默认是字符串类型,直接参与计算可能出现隐式转换问题,最好显式转成数字。
修复后的代码
let priceTl = document.getElementById("tl"); let priceSar = document.getElementById("sar"); let finalPrice = document.getElementById("price"); let convertFromTl = () => { // 显式转换为数字,空值或非数字时默认取0 let tl = Number(priceTl.value) || 0; // 保留两位小数后赋值给输入框 priceSar.value = (tl / 7.6503).toFixed(2); // 转换为数字用于后续计算 let sarValue = Number(priceSar.value); let tenPercent = sarValue * 0.1; // 用链式分支确保只执行一个逻辑 if (tenPercent <= 5) { finalPrice.value = (sarValue + 5).toFixed(2); } else if (tenPercent >= 15) { finalPrice.value = (sarValue + 15).toFixed(2); } else { finalPrice.value = (sarValue * 1.1).toFixed(2); } }; priceTl.addEventListener("input", convertFromTl); window.addEventListener("load", convertFromTl);
改动说明
- 条件分支优化:改用
if-else if-else链式结构,满足一个条件后就不会执行后续分支,避免结果被覆盖。 - 类型处理:将输入框的字符串值显式转为数字,防止隐式转换导致的计算错误;所有价格结果用
toFixed(2)保留两位小数,符合金额展示规范。 - 可读性提升:提取
tenPercent变量,避免重复计算,让逻辑更清晰。
内容的提问来源于stack exchange,提问作者Ahmed Mohamed
相关产品推荐
相关产品推荐

