假设我有以下代码:
var str = "4*(3)^2/1"
最简单的解决方案是将操作符制成一个栈,然后使用后缀表达式进行计算吗?还是我漏掉了一个真正基本的解决方案。
此外,如果我使用对数、自然对数、正弦、余弦和正切,我该如何适应呢?
var str = "4*(3)^2/1"
最简单的解决方案是将操作符制成一个栈,然后使用后缀表达式进行计算吗?还是我漏掉了一个真正基本的解决方案。
此外,如果我使用对数、自然对数、正弦、余弦和正切,我该如何适应呢?
很抱歉回复自己的问题,但最简单的解决方案是使用math.js
var ans = math.eval(str);
最简单但有点危险,因此在运算之前您可能需要验证(清理)表达式,使用eval(对于指数运算符^
,请将其替换为JavaScript中的指数运算符 ** ):
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));
^
是什么意思? - Déjà vu^
替换为 **
,因为后者表示指数运算。 - DjaouadNM您不需要使用后缀表示法。您可以使用eval
方法。
var str = "4*(3)^2/1";
console.log(str);
console.log(eval(str));
Parser.evaluate("2 ^ x", { x: 4 });
^2
视为平方,而不是 XOR 2
。 - Déjà vu