javascript - 博德玛斯计算器
问题描述
我正在尝试创建一个遵循 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 在每个循环中都没有更新,因为我将它分配为 const 变量。这是正确的代码:
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)
}
}
如果有人有更好的方法来实现同样的目标,请告诉我。
推荐阅读
- html - amp-lightbox 背景图像叠加在顶部
- c# - 用 C# 编写程序并要求用户输入 5 个唯一数字
- firebase - 为 Firebase 托管代理外部 API?
- java - 如何在settings.xml的配置文件中使用maven插件
- c# - Runas 动词在特定的 Windows 10 机器上没有提升
- python - Pandas 添加一列依赖于字符串的浮点数
- node.js - 有没有办法在 MongoDB 中获取最后一个 USED/READ 文档?
- java - 从 Java 插入 MySQL 时 CPU 使用率高
- python - 多处理不会创建任何额外的进程
- ios - 从 iOS 应用上传 OneDrive Business 上的文件失败