2

我已经在谷歌搜索了一段时间,但找不到我需要的东西。我需要一个开源数学表达式解析器和求值器——其中有无数个——但它可以链接到像 Apache Commons Math 这样的体面的数学库。我需要复杂的算术、sin 等基本函数、在复平面上工作的 log 以及 gamma、erf 等函数。

我找到的最接近的答案是用于在 Java 中评估数学表达式的内置方法- 但除了编写无数帮助函数之外,我看不到如何绑定

  • jexpr
  • 朱比
  • 杰瓦尔
  • javax.script

与Commons 数学。此外,修改我自己现有的(实值)表达式解析器以绑定所有函数也需要相当多的工作。

另外,在我的应用程序中包含一个完整的脚本编程语言(如 python/ruby)似乎有点矫枉过正,我想做的只是一个老式的袖珍计算器。

不是已经有人做过这种事了吗?谢谢!

4

2 回答 2

2

您可能想查看我创建的实现:

https://github.com/uklimaschewski/EvalEx

它基于java.math.BigDecimal并支持基本的数学和布尔运算。这是一个非常紧凑的实现:只有一个类文件,对其他库没有任何依赖关系。此外,它可以通过自定义函数和运算符轻松扩展。

您的gamma(1.8)示例可以通过这种方式添加:

Expression e = new Expression("gamma(1.8)");

e.addFunction(e.new Function("gamma", 1) {
    @Override
    public BigDecimal eval(List<BigDecimal> parameters) {
        BigDecimal gamma = MyMathLibraryGammaCalculation(parameters.get(0));
        return gamma;
    }
});

e.eval(); // returns gamma(1.8)
于 2013-03-27T10:08:13.427 回答
0

我们曾经使用 ScriptEngine for javascript 来执行此操作 - 不确定这是否足以满足您的要求......这是 SA 中的参考:

Java 中有 eval() 函数吗?

于 2013-03-10T08:21:14.877 回答