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



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

我认为这可能与数字的除法和减法有关,因为除了问题之外,我需要假设所有输入都是有效的,所以不会有负数,也不会有错误的输入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])

这是给你期望的答案

最新更新