【发布时间】:2011-11-07 16:22:32
【问题描述】:
在我的一个项目中,我想添加一个用户可以在公式中提供的功能,例如
sin (x + pi)/2 + 1
我在我的 Java 应用程序中使用的
/**
* The formula provided by the user
*/
private String formula; // = "sin (x + pi)/2 + 1"
/*
* Evaluates the formula and computes the result by using the
* given value for x
*/
public double calc(double x) {
Formula f = new Formula(formula);
f.setVar("x", x);
return f.calc();
// or something similar
}
如何计算数学表达式?
【问题讨论】:
-
我已经用过 google,但前 20 个结果中的所有库既不是开源也不是免费的。那么,你的谷歌发现了什么?
-
这是一个广泛的问题。我建议创建一个语法和词法分析器/解析器。创建一个 AST 并通过遍历树来评估表达式。从简单开始,通过修改语法来扩大圈子。您需要定义什么构成可以评估的有效表达式,什么不能。算术和三角函数是一回事;贝塞尔函数和积分函数是另一个。