我是Android开发人员,作为我的下一个应用程序的一部分,我将需要评估各种用户创建的数学表达式和方程式.我正在寻找一个很好的java库,它是轻量级的,可以使用用户定义的变量和常量,trig和指数函数等来评估数学表达式.
我环顾四周,Jep似乎很受欢迎,但我希望听到更多的建议,特别是那些之前使用过这些库的人.
我正在寻找一个简单条件表达式的求值器.表达式应包括变量(只读),字符串,数字和一些基本运算符.
例如这样的表达式:
${a} == "Peter" && ( ${b} == null || ${c} > 10 )
Run Code Online (Sandbox Code Playgroud)
到目前为止,我实现了一个相当"神奇"的解析器,它返回一个我可以评估的AST,但我无法相信我是第一个解决这个问题的人.
我可以使用哪些现有代码?
我正在开发一个能够像String一样评估String的数学解析器'5+b*sqrt(c^2)'.我正在使用ANTLR进行解析并取得良好进展.现在我摔倒在Java类上BigDecimal并且想:嘿,为什么不在这里考虑精度.
我的问题是Java API不提供BigDecimal类似的三角函数方法java.lang.Math.你知道是否有像Apache Commons这样的好的数学库可以解决这个问题吗?
其他问题是如何实现功率方法,以便我可以用BigDecimals 计算4.9 ^ 1.4 .这可能吗?
关于数值计算的书籍请求也受到赞赏.
这不是学校作业或任何事情,但我意识到这是一个主要的学术问题.但是,我一直在努力做的是解析"数学"文本并提出答案.
例如 - 我可以弄清楚如何解析'5 + 5'或'3*5' - 但是当我尝试正确地将操作链接在一起时我失败了.
(5 + 5)*3
这大多只是让我烦恼,我无法弄明白.如果有人能指出我的方向,我真的很感激.
编辑 感谢您的所有快速回复.对不起,我没有更好地解释.
首先 - 我没有使用正则表达式.我也知道已有的库可以作为字符串使用数学表达式并返回正确的值.所以,我主要是看着这个,因为,遗憾的是,我并没有"明白".
第二 - 我尝试过的事情(可能是误入歧途),但我在计算'('和')'并首先评估最深的项目.在简单的例子中,这有效; 但我的代码不漂亮,更复杂的东西崩溃.当我'计算'最低级别时,我正在修改字符串.
所以...(5 + 5)*3
会变成10*3
然后评估为30
但它感觉"错了".
我希望这有助于澄清事情.我肯定会查看提供的链接.
我想解决以下condtion字符串.因为我想在我的项目中支持动态条件.
a != 0 && b > 5
Run Code Online (Sandbox Code Playgroud)
我的预期计划是
public boolean resolve() {
String condition = "a != 0 && b > 5";
Map<String, Object> paramMap = new HashMap<String, Object>;
paramMap.put("a", 2);
paramMap.put("b", 6);
boolean result = ConditionResolver.resolve(condition, paramMap);
if(result) {
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
我不是要解决数学等式,如下所示
((a + b) * y) /x
Run Code Online (Sandbox Code Playgroud) 任何人都可以帮助我解决这个问题
String expr ="1.3*60";
//Integer xx=Integer.valueOf();
int i = Integer.parseInt(expr);
System.out.println("xx "+i);
Run Code Online (Sandbox Code Playgroud)
当我编译它时它显示数字格式异常,我在java的初级阶段,所以请帮我解决这个问题,谢谢你
我基本上是在制作一个Java程序,它必须非常快速地运行大量计算(每帧,目标是至少30 f/s).这些将主要是三角函数和幂函数.我问的问题是:哪个更快:使用已经提供的Java Math函数?或者编写我自己的函数来运行?
java ×6
math ×3
parsing ×2
trigonometry ×2
.net ×1
android ×1
bigdecimal ×1
calculator ×1
exponent ×1
precision ×1