使用Javascript从字符串执行数学操作
我试图找到一种简单的方法来执行一组javascript数学操作,而不使用eval函数。示例:1+2x3x400+32/2+3,必须遵循PEMDAS数学原理。这就是我所拥有的,但它不起作用使用Javascript从字符串执行数学操作,javascript,node.js,Javascript,Node.js,我试图找到一种简单的方法来执行一组javascript数学操作,而不使用eval函数。示例:1+2x3x400+32/2+3,必须遵循PEMDAS数学原理。这就是我所拥有的,但它不起作用 function mdas(equation) { let operations = ["*", "/", "+", "-"]; for (let outerCount = 0; outerCount <
function mdas(equation) {
let operations = ["*", "/", "+", "-"];
for (let outerCount = 0; outerCount < operations.length; outerCount++) {
for (let innerCount = 0; innerCount < equation.length; ) {
if (equation[innerCount] == operations[outerCount]) {
let operationResult = runOperation(equation[innerCount - 1], operations[outerCount], equation[innerCount + 1]);
var leftSideOfEquation = equation.substr(0, equation.indexOf(innerCount - 1));
var rightSideOfEquation = equation.substr(equation.indexOf(innerCount), equation.length);
var rightSideOfEquation = rightSideOfEquation.replace(rightSideOfEquation[0],String(operationResult));
equation = leftSideOfEquation + rightSideOfEquation;
innerCount = 0;
}
else {
innerCount++;
}
}
}
return "Here is it: " + equation; //result of the equation
}
这有点老套,但你可以试试这样: 变量方程=[ '1+2*3*4+1+1+3', '1+2*3*400+32/2+3', '-5+2', '3*-2', ]; 公式{console.logmdaseqs[eq];}中的forvar eq 函数方程{ 对数方程; var故障保护=100;
var num='?有点粗糙,但您可以尝试以下方法: 变量方程=[ '1+2*3*4+1+1+3', '1+2*3*400+32/2+3', '-5+2', '3*-2', ]; 公式{console.logmdaseqs[eq];}中的forvar eq 函数方程{ 对数方程; var故障保护=100;
var num='?如果您不想使用像-这样的完整库,也不想创建自己的脚本,这将涉及:词法分析、标记化、语法分析、递归树解析、编译和输出。。。 最简单的陈词滥调是: const calc=s=>Function`return${s}`; console.log calc1+2*3*400+32/2+3;//2420 console.log calc-3*-2;//6 console.log计算-3*+1;//-3 console.log计算-3+-1;//-4
console.log calc2*3+1;//8如果您不想使用像-这样的完整库,也不想创建自己的脚本,其中包括:词法分析、标记化、语法分析、递归树解析、编译和输出。。。 最简单的陈词滥调是: const calc=s=>Function`return${s}`; console.log calc1+2*3*400+32/2+3;//2420 console.log calc-3*-2;//6 console.log计算-3*+1;//-3 console.log计算-3+-1;//-4
console.log calc2*3+1;//8您能描述一些代码不能正常工作的示例吗?@kylejrp当前示例不起作用,使用像1+2*3*4+1+1+3这样简单的东西也不起作用。您能描述一些代码不能正常工作的示例吗?@kylejrp当前示例不起作用,使用像1+2*3*4+1+1+3这样简单的东西是不存在的work@Nation:我可能可以处理正则表达式中具有正后视的运算符后的负数,但考虑到这有多干净,我不知道这有什么意义。看起来不错吗?@chrisslickle,正则表达式实际上很简单。我也在尝试一下……为了好玩……会不会updatesoon@RokoC.Buljan这太棒了!我真的很好地理解了简单数学背后的科学原理,以及我们如何使用编程语言来实现它的基本计算。两个答案都很好,并且展示了解决问题的不同创新方式。@Nation编写复杂代码成了一门艺术。很好。@Nation:我可以可能在正则表达式中使用正后视运算符后处理负数,但考虑到这有多干净,我不知道有什么意义。看起来不错吗?@chriss,正则表达式实际上很简单。我也在尝试一下……为了好玩……会更新的soon@RokoC.Buljan这太棒了!我真的很好理解d简单数学运算背后的科学,以及我们如何使用编程语言来实现其基本计算。这两个答案都很好,并展示了解决问题的不同创新方式。@编写复杂代码成为一门艺术。很好。评论不用于扩展讨论;本次对话是。评论不适合进行长时间的讨论;此对话已结束。