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

Ber*_*rty 5 java parsing formula evaluate mathematical-expressions

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

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

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

开源是首选.

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

Mar*_*gus 3

这就是所谓的Arithmetic evaluation。实现这一点的最简单方法之一是使用 Edsger Dijkstra Shunting-yard_algorithm

\n
\n

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

\n
\n

但我在一些 stackoverflow 用户博客上看到了您正在寻找的确切解决方案,但我不记得地址了(就像“代码猴子主义”)。它是轻量级类,您可以在小程序中使用它(您还可以定义常量和重置值)。

\n

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

\n
\n

线性递归数学计算器

\n

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

\n

在互联网上的研究发现了许多相当好的解决方案,所有这些解决方案都围绕着创建解析树(这是有道理的)。问题是 - 它们都相当庞大,我无法仅仅为了数学而将 100K 添加到我的小程序大小。所以我开始想知道这个问题的线性递归解决方案。最终结果是一个性能可接受的单一类,没有外部依赖项,重量小于 10 KiB。

\n
\n

  • 除非我的评估者不会像问题中变量未知的示例那样“求解”方程。它只能通过反复试验来获取不同的 x 值并评估“(25+36+x)*2”,直到给出的答案为 25。 (2认同)