数学表达式(字符串)到Java中的数字

我正在尝试找到像Java嵌入插件 (JEP)这样可以评估数学公式(字符串)并给出答案的东西。

但它也应该计算一个变量,例如:(25 + 36 + x)* 2 = 25应该给出:x = -11

有点像http://www.wolframalpha.com/ ,但它不应该是多function的,它应该脱机工作。

开源是首选。

我的小计算器项目需要它, http://sourceforge.net/projects/calex/ 。

这称为Arithmetic evaluation 。 实现这一目标的最简单方法之一是使用Edsger Dijkstra Shunting-yard_algorithm 。

分流码算法是一种解析中缀符号中指定的数学方程的方法。 它可用于以反向波兰表示法(RPN)或抽象语法树(AST)生成输出。 该算法由Edsger Dijkstra发明,并命名为“调车场”算法,因为其操作类似于铁路调车场。 与RPN的评估一样,分流码算法是基于堆栈的。 中缀表达式是大多数人习惯使用的数学符号forms,例如3 + 4或3 + 4 *(2-1)。 对于转换,有两个文本变量(字符串),输入和输出。 还有一个堆栈,用于保存尚未添加到输出队列的运算符。 要进行转换,程序会按顺序读取每个符号,并根据该符号执行某些操作。

但是我已经在一些stackoverflow用户博客上看到了你正在寻找的确切解决方案,但我记不起地址(它就像’代码猴子’)。 它是轻量级的,你可以在applet中使用(你也可以定义常量和重置值)。

编辑:找到它: http : //tech.dolhub.com/Code/MathEval

线性递归数学评估器

这个数学表达式评估器的诞生是因为需要一个小型且有效的解决方案,可以合理有效地评估任意表达式而无需预编译。 我需要一些能用变量进行基本数学运算的东西,例如:“Top + 2”,“Bottom-2”和“(Right + 1-Left)/ 2”。

对互联网的研究提出了许多相当不错的解决方案,所有解决方案都围绕创建解析树(这是有道理的)。 问题是 – 它们都相当笨重,我不能为我的applet大小添加100K只是为了数学。 所以我开始想知道这个问题的线性递归解决方案。 最终结果是一个可接受的单一类,没有外部依赖,权重低于10 KiB。

我根据Apache License 2.0的条款发布了基于Dijkstra的Shunting Yard算法的表达式评估器:

http://projects.congrace.de/exp4j/index.html