为什么我的 Javascript 计算器在按等号键后按运算符时答案会乘以 2?
Why does my Javascript calculator multiply the answer by 2 when pressing an operator following an equals press?
我正在努力完成 The Odin 项目,目前我被困在“计算器”项目上。
在大多数情况下,考虑到我目前的 Javascript 知识,我对它的工作方式感到满意。然而;按等号按钮输出计算结果后,如果我再按任何数学运算符 if 就会立即将显示的值乘以 2,我不明白为什么。
计算器可以在这里找到:https://nortski78.github.io/calculator/
要重现错误,请输入 5 + 5 = +(将显示 20)
我认为问题所在的代码部分是:
operatorButtons.forEach((operatorButton) => {
operatorButton.addEventListener('click', (event) => {
setOperand(getDisplayValue());
setOperator(event.target.textContent);
clear = true;
})
})
btnEquals.addEventListener('click', (event) => {
setOperand(getDisplayValue());
operate(operator, firstOperand, secondOperand);
clear = true;
})
function setOperand(operand){
operand = parseFloat(operand);
if(firstOperand === null) { firstOperand = operand; }
else {
secondOperand = operand;
clear = true;
updateDisplay(operate(operator, firstOperand, secondOperand));
firstOperand = getDisplayValue();
}
}
function setOperator(digit){
if(digit != "="){
operator = digit;
}
}
function operate(operator, num1, num2){
switch(operator){
case "+":
return add(num1, num2);
break;
case "-":
return subtract(num1, num2);
break;
case "*":
return multiply(num1, num2);
break;
case "/":
return divide(num1, num2);
break;
}
}
点击 +
调用 setOperand
。那里 if(firstOperand === null)
不会是真的,您之前已经为该变量分配了一个值(当您处理前一个 +
按钮单击时),并且它再也不会在任何地方再次“无效”。
所以这会继续分配 secondOperand
,然后它会调用 updateDisplay
包装的 operate
。
所以在按下=
之后,你必须重新设置你的第一个操作数,这样当它再次经过setOperand
时,它会先分配一个新的第一个操作数,并且只执行计算&在第二个操作数上显示更新。
我正在努力完成 The Odin 项目,目前我被困在“计算器”项目上。
在大多数情况下,考虑到我目前的 Javascript 知识,我对它的工作方式感到满意。然而;按等号按钮输出计算结果后,如果我再按任何数学运算符 if 就会立即将显示的值乘以 2,我不明白为什么。
计算器可以在这里找到:https://nortski78.github.io/calculator/
要重现错误,请输入 5 + 5 = +(将显示 20)
我认为问题所在的代码部分是:
operatorButtons.forEach((operatorButton) => {
operatorButton.addEventListener('click', (event) => {
setOperand(getDisplayValue());
setOperator(event.target.textContent);
clear = true;
})
})
btnEquals.addEventListener('click', (event) => {
setOperand(getDisplayValue());
operate(operator, firstOperand, secondOperand);
clear = true;
})
function setOperand(operand){
operand = parseFloat(operand);
if(firstOperand === null) { firstOperand = operand; }
else {
secondOperand = operand;
clear = true;
updateDisplay(operate(operator, firstOperand, secondOperand));
firstOperand = getDisplayValue();
}
}
function setOperator(digit){
if(digit != "="){
operator = digit;
}
}
function operate(operator, num1, num2){
switch(operator){
case "+":
return add(num1, num2);
break;
case "-":
return subtract(num1, num2);
break;
case "*":
return multiply(num1, num2);
break;
case "/":
return divide(num1, num2);
break;
}
}
点击 +
调用 setOperand
。那里 if(firstOperand === null)
不会是真的,您之前已经为该变量分配了一个值(当您处理前一个 +
按钮单击时),并且它再也不会在任何地方再次“无效”。
所以这会继续分配 secondOperand
,然后它会调用 updateDisplay
包装的 operate
。
所以在按下=
之后,你必须重新设置你的第一个操作数,这样当它再次经过setOperand
时,它会先分配一个新的第一个操作数,并且只执行计算&在第二个操作数上显示更新。