첨 만들어봐서 모르겠는데 ㅇㅅㅇ 이상한거 없지?

걍 일케 만드는거 아님? 오류 있으면 알려줘봐
https://github.com/yoonjonglyu/TextCalculator



function evaluate(expression) {
  // 여기에 코드를 작성해주세요.
  // eval(expression)
  const nums = [];
  const exps = [];
  getExpArr(expression).forEach((item) => {
    if (typeof item === 'number') {
      nums.push(item);
    } else {
      if (item === '(') {
        exps.push(item);
      } else if (item === ')') {
        while (exps.length > 0) {
          const state = exps.pop();
          if (state === '(') break;
  
          const numB = nums.pop();
          const numA = nums.pop();
          nums.push(calculate(state, numA, numB));
        }
      } else {
        if (exps.length > 0) {
          const prev = exps.pop();
          if (getOperatorRatio(prev) >= getOperatorRatio(item)) {
            const numB = nums.pop();
            const numA = nums.pop();
            nums.push(calculate(prev, numA, numB));
            exps.push(item);
          } else {
            exps.push(prev, item);
          }
        } else exps.push(item);
      }
    }
  });
  while (exps.length > 0) {
    const numB = nums.pop();
    const numA = nums.pop();
    nums.push(calculate(exps.pop(), numA, numB));
  }
  return nums[0];
}
function calculate(operator, numA, numB) {
  switch (operator) {
    case '+':
      return numA + numB;
    case '-':
      return numA - numB;
    case '*':
      return numA * numB;
    case '/':
      return numA / numB;
    default:
      break;
  }
}
  
function getExpArr(expression) {
  const result = [];
  
  const state = [...expression]
    .filter((char) => char !== ' ')
    .reduce((state, item) => {
      if (getOperatorRatio(item)) {
        if (item === '(') {
          // 열린 괄호처리
          result.push(item);
        } else if (item === ')') {
          // 닫힌 괄호 처리
          if (state.length > 0) result.push(parseFloat(state.join('')));
          result.push(item);
          state = [];
        } else if (state.length === 0 && result[result.length - 1] !== ')') {
          // 음수 처리
          state.push(item);
        } else {
          if (state.length > 0) result.push(parseFloat(state.join('')));
          result.push(item);
          state = [];
        }
      } else state.push(item);
  
      return state;
    }, []);
  
  if (state.length > 0) result.push(parseFloat(state.join('')));
  
  return result;
}
function getOperatorRatio(operator) {
  return {
    '+': 2,
    '-': 2,
    '*': 3,
    '/': 3,
    '(': 1,
    ')': 1,
  }[operator];
}
  
evaluate('1 + 2 * 3'); // 7
evaluate('(1 + 2) * 3'); // 9
evaluate('1 / 32.5 + 167 * (3498 - 1155) * -721 * (4885 - 1) / 0.5'); // -2755685654567.969