我需要在QScriptEngine中评估数字的立方体或平方
QString expression_string("2 * 2 * 2"); // not like this but 2^3
QScriptEngine expression;
double my_val=expression.evaluate(expression_string).toNumber();
如何以这种方式实现像2 ^ 2这样的2 * 2?
答案 0 :(得分:1)
如果您可以直接使用Math.pow
功能,那么您应该只使用它:auto expression = QStringLiteral("Math.pow(2, 3)")
。
如果要将2^3
之类的表达式重写为有效的javascript,则需要一个解析器。您将重写中缀语法expr1^expr2
为前缀语法Math::pow(expr1, expr2)
。 无法通过简单的正则表达式完成。
解析器可以用JavaScript编写。也许您可以重用jsep,修改后使用指数运算符,并使用它来创建表达式的AST,然后您可以将其重写为Math.pow
或<的有效javascript / em>根据AST进行评估。
jsep使添加自定义运算符变得微不足道 - 这个例子直接来自他们的自述文件:
jsep.addBinaryOp("^", 10);