在javascript中解算算术字符串?

时间:2017-09-02 19:49:28

标签: javascript math

假设我有以下代码:

    var str = "4*(3)^2/1"

最简单的解决方案是制作运算符堆栈并使用后缀表示法解决?或者是否有一个我错过的非常基本的解决方案。

另外,如果我使用log,ln,sin,cos和tan?

,我该如何适应?

3 个答案:

答案 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));




对于sincosexp等特殊功能,请使用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 });