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

土耳其里拉转沙特里亚尔计算器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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:18:35