我需要在Android应用中解决字符串方程,例如“3 + 4 *(5 - log(100))”。我已经尝试过使用BeanShell,不幸的是我对整数/十进制数有一些问题。当我进入
Interpreter interpreter = new Interpreter();
String res = "9223372036854775807D";
interpreter.eval("result = " + res);
res = interpreter.get("result").toString();
res = new BigDecimal(res).stripTrailingZeros().toPlainString();
我得到结果9223372036854776000
??
但是当我使用String res = "9223372036854775807D";
时,我得到了正确的9223372036854775807
。
我根本无法怀疑所有D
到L
,因为当我遇到像3L/2L -> 1 (but should be 1.5
这样的东西时,我会得到错误的结果
有谁知道如何处理大量数字,如9223372036854775807 or -9223372036854775808
,还是有人可以建议替代BeanShell?
答案 0 :(得分:1)
你试过JEP表达式解析器了吗? 它是一个纯数学表达式解析器,纯粹用Java编写,可以解析三角函数,对数函数,复数值,你也可以定制自己的函数...
答案 1 :(得分:1)
使用MathEval从以下链接下载:http://tech.dolhub.com/code/matheval