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

freeCodeCamp计算器开发:如何将等式字符串转换为数值并计算结果

计算器等式计算功能实现方案

方案1:手动拆分解析(符合你最初的实现思路)

你不需要把每个字符单独存入数组再判断,直接遍历等式字符串拼接数字即可,天然支持多位数场景:

  1. 遍历字符串时设置标识符区分当前拼接的是第一个运算数、运算符、还是第二个运算数
  2. 遇到数字字符就拼接到对应运算数的字符串中,遇到非数字字符就标记为运算符
  3. 两个运算数拼接完成后统一转数值类型再做计算

核心实现代码(直接替换你的result函数即可)

function result(){
  const exp = document.querySelector('input').value;
  let num1Str = '', num2Str = '', operator = '';
  let findOperator = false;
  // 遍历等式字符串
  for (const char of exp) {
    // 判断是否为数字字符
    if (!isNaN(Number(char))) {
      if (!findOperator) {
        num1Str += char;
      } else {
        num2Str += char;
      }
    } else {
      // 非数字就是运算符
      operator = char;
      findOperator = true;
    }
  }
  // 转成整数
  const num1 = parseInt(num1Str);
  const num2 = parseInt(num2Str);
  // 计算结果
  let resultVal;
  switch(operator) {
    case '+': resultVal = num1 + num2; break;
    case '-': resultVal = num1 - num2; break;
    case '*': resultVal = num1 * num2; break;
    case '/': resultVal = num1 / num2; break;
    default: resultVal = 0;
  }
  // 结果写回输入框,同步全局状态方便后续连续计算
  document.querySelector('input').value = resultVal;
  x = resultVal;
  trigger = 1;
}

现有代码优化提示

你当前的number函数存在多位数输入的问题:每次按数字都会直接覆盖x的值,连续按两次1只会把x赋值为1而非11,可以修改为如下逻辑:

function number(variable){
  if(trigger==0){
    x = variable;
    document.getElementById("display").value = "" + x;
    trigger = 1;
  }else if(trigger==1){
    // 多位数拼接:原数左移一位(乘10)加新输入的数字
    x = x * 10 + variable;
    document.getElementById("display").value += "" + variable;
  }
}

方案2:简化实现(仅适用于合法输入场景)

如果你的输入框只会生成合法的四则运算表达式,可以直接用eval函数执行表达式,代码量极少:

function result(){
  const val = document.querySelector('input').value;
  const calcResult = eval(val);
  document.querySelector('input').value = calcResult;
  x = calcResult;
  trigger = 1;
}

注:如果需要兼容负数、小数、多运算符的场景,可以扩展方案1的逻辑,或者直接使用正则匹配拆分所有运算数和运算符即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:36:03