假设我有以下代码:
var str = "4*(3)^2/1"
最简单的解决方案是制作运算符堆栈并使用后缀表示法解决?或者是否有一个我错过的非常基本的解决方案。
另外,如果我使用log,ln,sin,cos和tan?
,我该如何适应?答案 0 :(得分:5)
很抱歉回答我自己的问题,但最简单的解决方案是使用math.js
var ans = math.eval(str);
答案 1 :(得分:4)
最简单但有点危险,因此您可能必须在评估之前验证(清理)表达式使用eval(对于exponent-operator ^
,将其替换为JavaScript **
中的exponent-operator ):
var str="4*(3)^2/1".replace(/\^/g,'**');
console.log(eval(str));

对于sin
,cos
,exp
等特殊功能,请使用JavaScript中相应的预定义函数创建自己的函数:
var str="4*(3)^2/1+(exp(5)*cos(14)^(1/sin(13)))^2".replace(/\^/g,'**');
function sin(x) { return Math.sin(x) }
function cos(x) { return Math.cos(x) }
// so on
function exp(x) { return Math.exp(x) }
console.log(eval(str));

答案 2 :(得分:2)
您不需要postfix
符号。您可以使用eval
方法。
var str = "4*(3)^2/1";
console.log(str);
console.log(eval(str));

另外,另一种解决方案是使用javascript-expression-evaluator,它允许你做以下的事情:
Parser.evaluate("2 ^ x", { x: 4 });