gpt4 book ai didi

javascript - BODMAS 计算器

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:39:21 24 4
gpt4 key购买 nike

我正在尝试创建一个遵循 bodmas 规则并首先尝试乘法的计算器。当点击等号按钮时,诸如“4*5+6*7”之类的字符串将存储在 displayValue 中。作为第一次尝试,我使用 reg ex 在字符串中搜索乘号及其位置。当它找到 lhs 和 rhs 的值并存储它时,它会调用。然后它使用 firstValue、secValue 将这些值相乘,并将 cal 替换为 displayValue 中的结果。这适用于 4*5,但我必须再次按等于才能执行 6*7。我尝试使用 while 循环但无法让它工作。我如何让它一次完成字符串中的所有乘法部分?

  equals() {
const displayValue = this.state.displayValue.slice(0);
let counter = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/g).length;
console.log("counter: " +counter);
while (counter > 0) {
let cal = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/).toString().split("*").join(",");
console.log("cal: " +cal)
let operPos = cal.search(/\*/);
let firstValue = parseFloat(cal.slice(0, operPos));
let secValue = parseFloat(cal.slice(operPos + 1));
let finalCal = firstValue * secValue;
let result = displayValue.replace(/[\d\.]+(?=\*)\*[\d\.]+/, finalCal);
this.setState({displayValue: result});
counter = counter -1;
console.log("counterII: " +counter)
}
console.log("new display: " +this.state.displayValue)
}

最佳答案

displayValue 没有在每个循环中更新,因为我将它分配为常量变量。这是正确的代码:

equals() {
let displayValue = this.state.displayValue.slice(0);
let counter = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/g).length;
console.log("counter: " +counter);
while (counter > 0) {
let cal = displayValue.match(/[\d\.]+(?=\*)\*[\d\.]+/).toString().split("*").join(",");
console.log("cal: " +cal)
let operPos = cal.search(/\*/);
let firstValue = parseFloat(cal.slice(0, operPos));
let secValue = parseFloat(cal.slice(operPos + 1));
let finalCal = firstValue * secValue;
displayValue = displayValue.replace(/[\d\.]+(?=\*)\*[\d\.]+/, finalCal);
this.setState({displayValue: displayValue})
console.log("result: " +displayValue)
counter = counter -1;
console.log("counterII: " +counter)
}
}

如果有人有更好的方法来实现同样的事情,请告诉我。

关于javascript - BODMAS 计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53467743/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com