前缀符号字符串计算器Javascript问题

Prefix notation string calculator Javascript problem

我正在为前缀符号字符串制作一个计算器,它涵盖了我添加到其中的所有正常测试。但是我遇到了一个似乎没有得到正确答案的问题,我不确定为什么它似乎有问题。

我认为这可能与数字的除法和减法有关,因为问题的另一个原因是我需要假设所有输入都是有效的,所以不会有负数或会不会有错误输入 IE 格式不正确

下面是代码和我输入进去的一些测试题

"+ / * 1 3 + 12 16 * 10 4" = 40.107142857142854
"+ * / - 5 3 / 1 3 + 2 2 / 3 * + 12 16 * 10 4" = 24.00267857142857 --- This is the one it doesn't like
"/ 300000 * + 12 16 * 10 40"= 26.785714285714285
function prefixEval(expression) {
    let temp = expression.split(' ')
    let expr = temp.reverse()
    let stack = []

    for (let i = 0; i < expr.length; i++) {
        if (
            expr[i] === '+' ||
            expr[i] === '-' ||
            expr[i] === '/' ||
            expr[i] === '*'
        ) {
            let j = stack.pop()
            let k = stack.pop()
            let temp = checkOperator(parseInt(j), parseInt(k), expr[i])

            stack.push(temp)
        } else {
            stack.push(expr[i])
        }
    }
    return stack
}

function checkOperator(a, b, op) {
    switch (op) {
        case '+':
            console.log('adding' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a + b)
            return a + b
        case '-':
            console.log('subtracting' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a - b)
            return a - b
        case '/':
            console.log('dividing' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a / b)
            return a / b
        case '*':
            console.log('multiplying' + ' ' + a + ' ' + op + ' ' + b)
            console.log(a * b)
            return a * b
        default:
            return 'this is not correct'
    }
}

console.log(prefixEval('+ * / - 5 3 / 1 3 + 2 2 / 3 * + 12 16 * 10 4'))

您正在使用 parseInt 并将 2 除以 0 得到 Infinity 。要修复,

改变,

let temp = checkOperator(parseInt(j), parseInt(k), expr[i])

let temp = checkOperator(parseFloat(j), parseFloat(k), expr[i])

这是给你预期的答案