首页 > 解决方案 > 点击链接计算 - 乘法和除法问题

问题描述

目前我正在研究 React 计算器。慢慢地但肯定我即将完成这个项目,但今天我注意到这个数学逻辑错误。

例子

2+2*5 - 返回 20 但应该返回 12 ,因为乘法当然是首选。

每次点击操作员按钮后调用的函数

function operator(e){
let newOperator='';
let oldOperator=number.operator;
let result;

if(number.firstNumber && number.operator && number.secondNumber){
  newOperator = e.target.name;

  if(oldOperator === '+'){
    result = Number(number.firstNumber) + Number(number.secondNumber);
  }

  if(oldOperator === 'x'){
    result = Number(number.firstNumber) * Number(number.secondNumber);
  }
  
  if(oldOperator === '-'){
    result = Number(number.firstNumber) - Number(number.secondNumber);
  }
  
  if(oldOperator === '/'){
    result = Number(number.firstNumber) / Number(number.secondNumber);
  }

  setNumber(prevState => ({
    ...prevState,
    firstNumber:result,
    displayed:result,
    operator:newOperator,
    secondNumber:''
  }))

}else{
  let operator = e.target;
  setNumber(prevState => ({
    ...prevState,
    operator:operator.name
  }))
  turnOnOrange(operator);
}

这个函数没有什么不好的,它工作得很好,除了乘法和除法的逻辑问题。我知道问题是每次我按下新的操作员按钮并且条件满足时,它的计算都会将其推入状态。因此,就像上面的示例一样,函数首先将 2+2 相加,然后将其结果乘以 5。

我试图通过创建特定的 If 条件、变量和使用第二个数字的 prevState 来解决这个问题,因为在每次操作之后(无论是 + - * 还是 / ),secondNumber 状态都设置为空,并且结果被推送到 firstNumber 状态。因为链接的可能性。

例如

let oldOperator = number.operator;
let newOperator = event.target.name;
if(oldOperator === '+' && newOperator === 'x'){
    result = Number(number.firstNumber) + Number(number.prevNum) * Number(number.secondNumber);
}

但它也没有奏效。我认为这只是这些条件的逻辑问题,我无法弄清楚如何正确编写它。

代码沙盒链接

https://codesandbox.io/s/goofy-cannon-l5kbt?fontsize=14&hidenavigation=1&theme=dark

谢谢

标签: javascripthtmlreactjscalculator

解决方案


您可以使用该eval()功能。此功能将为您进行计算。

因此,您必须将整个方程放入eval函数中。

const equation = "2+2*5"
console.log(eval(equation))


推荐阅读