java - 与 Apache commons math 绑定(bind)的小型 Java 开源数学表达式计算器

标签 java parsing math expression complex-numbers

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

我找到的最接近的答案是 Built-in method for evaluating math expressions in Java - 但除了编写无数的辅助函数之外,我不知道如何绑定(bind)

  • jexpr
  • jruby
  • 杰瓦尔
  • javax.script

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

另外,在我的应用程序中包含像 python/ruby 这样的完整脚本编程语言似乎有些过分了,我想做的只不过是一个老式的袖珍计算器。

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

最佳答案

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

https://github.com/uklimaschewski/EvalEx .

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

您的 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)

关于java - 与 Apache commons math 绑定(bind)的小型 Java 开源数学表达式计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320224/

相关文章:

Java NoClassDefFoundError 与继承类

java - 从子类访问基类中的 get 方法不返回值

java - 使用 NODEJS 和不使用 TOMCAT 的 Pentaho 报告

JavaScript 身份验证 JSONString : [object Object], [object 对象]

c++ - 如何解释VtkCamera viewTransformMatrix

java - 如何设置循环来选择句子中的单词?

C - 我应该如何将文件中的标记解析为结构?

python - PLY : Parsing error. 规则意外匹配空标记集

math - 在链表中 x←y 是怎么表达的?

algorithm - 什么函数伪随机地重新排序 N 个项目?