2013-03-10 83 views
2

我一直在寻找谷歌一段时间,但无法找到我需要的东西。 我需要一个开源的数学表达式解析器&评估器 - 其中有无数 - 但链接到一个体面的数学库,如Apache Commons Math。我需要复杂的算术,诸如罪的基本功能,在复杂平面上工作的日志,以及诸如伽玛,erf等函数。小型Java开源数学表达式评估器,与Apache公用数学计算结合

最接近的答案,我发现是Built-in method for evaluating math expressions in Java - 但我不能看到,除了创作了无数的辅助功能,绑定

  • jexpr
  • JRuby的
  • jeval
  • 的javax.script

与下议院数学。此外,修改我自己的现有(实值)表达式解析器以绑定所有函数将需要很多工作。

另外,在我的应用程序中包括一个像python/ruby​​这样的整个脚本编程语言似乎有点矫枉过正,我想要做的仅仅是一个老式的袖珍计算器。

还没有人做过这样的事情已经? 谢谢!

+0

只是为了总结,我想是一个解析器的数学库,**结合不用额外的努力**。 – 2013-03-10 08:32:57

回答

0

我们使用的ScriptEngine的JavaScript来做到这一点 - 不知道这是足以满足你的要求......这里是SA的引用:

Is there an eval() function in Java?

+0

感谢您的快速回答。但我不确定这是否适合我的目的 - 除非我错过了一些东西。我编写了自己的解析器,它们可以完成我所需要的大部分工作,但工作是与好的数学库和复杂的算术运算符链接,并与标准函数库链接。这个想法是,用户将能够编写'gamma(1.8)',并且知道将函数引导到数学库。 – 2013-03-10 08:30:25

1

你可能想看看一个实现我创建的:

https://github.com/uklimaschewski/EvalEx

它基于java.math.BigDecimal并支持基本的matehmatical和布尔操作。 这是一个非常紧凑的实现:只有一个类文件没有任何依赖于其他库。另外,它可以通过自定义功能和操作员轻松扩展。

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)