乐趣区

JS实现用户输入加减乘除字符串计算结果

由于项目需求,需要在 table 内做成跟 excel 的功能一样,保存 cell 表格里面的计算表达式,点击聚焦显示表达式,失焦显示计算结果,奇葩的玩意儿
针对这个需求封装了函数
// 计算字符串输入的乘除, 参数二为最多保留多少位小数
function MultiplicationDivision(str, num = 4) {
if (!str) return “”;
var regex = /(\d+(?:\.\d+)?)([*/])(\d+(?:\.\d+)?)/;
return str.replace(regex, function (matchStr) {
return eval(matchStr).toFixed(num);
});
}
// 计算字符串输入的加减, 参数二为最多保留多少位小数
function AddSubtract(str, num = 4) {
if (!str) return “”;
var regex = /(\d+(?:\.\d+)?)([+-])(\d+(?:\.\d+)?)/;
return str.replace(regex, function (matchStr) {
return eval(matchStr).toFixed(num);
});
}
// 递归计算字符串中的乘除计算式
function calculateMultiplicationDivision(str) {
if (str.indexOf(“*”) !== -1 || str.indexOf(“/”) !== -1) {
str = MultiplicationDivision(str);
if (str.indexOf(“*”) !== -1 || str.indexOf(“/”) !== -1) {
console.log(‘ 乘除法 1:’, str);
return calculateMultiplicationDivision(str);
} else {
console.log(‘ 乘除法 2:’, str);
return str;
}
}
}
// 递归计算字符串中的加减计算式
function calculateAddSubtract(str) {
if (str.indexOf(“+”) !== -1 || str.indexOf(“-“) !== -1) {
str = AddSubtract(str);
if (str.indexOf(“+”) !== -1 || str.indexOf(“-“) !== -1) {
console.log(‘ 加减法 1:’, str);
return calculateAddSubtract(str);
} else {
console.log(‘ 加减法 2:’, str);
return str;
}
}
}
// 计算输入的计算式字符串
function calculate(str) {
if (str.indexOf(“*”) !== -1 || str.indexOf(“/”) !== -1) {
str = calculateMultiplicationDivision(str);
if (str.indexOf(“+”) !== -1 || str.indexOf(“-“) !== -1) {
return calculateAddSubtract(str);
}
} else if (str.indexOf(“+”) !== -1 || str.indexOf(“-“) !== -1) {
return calculateAddSubtract(str);
}
}
注意:输出的式字符串,如需要数字请自行转换
console.log(calculate(‘2*6+7*1-8/4’));
// 输出

console.log(calculate(‘2*6.5+7*1.4-8/4’));

退出移动版