javascript - 点击链接计算 - 乘法和除法问题
问题描述
目前我正在研究 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
谢谢
解决方案
您可以使用该eval()
功能。此功能将为您进行计算。
因此,您必须将整个方程放入eval
函数中。
const equation = "2+2*5"
console.log(eval(equation))
推荐阅读
- r - 仅在 R 中对疑似类别的患者进行了多少次测试
- c# - C# - 如何使用 MySqlAdapter 参数化 SQL 查询
- javascript - 如果 id 匹配,如何比较两个数组并更改名称?
- java - 为什么我的 SmartEnemy 在我的 Java 游戏中没有跟随玩家,而是转到屏幕顶部?
- r - 在过滤器中使用 str_detect 和 & 的简写
- python - MultiValueDictKeyError - stripeToken Django 错误
- android - 如何在kotlin的首选项中为计时器保存多个时间值?
- elasticsearch - ElasticSearch - 过滤从嵌套查询返回的数据
- node.js - node.js 中的 Java 的 Fillo 插件
- javascript - 如何在我的 React Typescript 计数器中使用类型接口进行钻孔?