或者市面上有没有开箱即用的 jar
例如计算
String str = “1+23-4+(4/2)^25+(4/2)^2*2.222E-6”;
如何计算呢。。。
1
zydxn 2020-02-26 12:28:30 +08:00 1
ScriptEngineManager
|
2
Perci 2020-02-26 12:30:55 +08:00 via Android
用夹娃实现计算器
|
3
zydxn 2020-02-26 12:32:05 +08:00
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName ("JavaScript"); final Object eval = engine.eval("1 + 23 - 4 + (4/2)^25 + (4/2)^2*2.222E-6"); System.out.println(eval); |
4
lqs 2020-02-26 12:33:55 +08:00
内嵌一个 JS 或 Python 解释器(记得先把 ^替换成**)
|
5
zjsxwc 2020-02-26 12:37:22 +08:00
这表达式是科学计算器的语法,js 也不支持幂运算,直接调用命令行获取运算结果呗
``` $octave --eval "1+23-4+(4/2)^25+(4/2)^2*2.222E-6" ans = 3.3554e+07 ``` |
6
zjsxwc 2020-02-26 12:45:20 +08:00
|
8
kerie 2020-02-26 12:51:51 +08:00 1
ScriptEngineManager 太重了,可以用 exp4j。
https://www.objecthunter.net/exp4j/ |
9
xwbz2018 2020-02-26 12:54:05 +08:00 via Android 1
<groupId>org.scijava</groupId>
<artifactId>jep</artifactId> 我用的这个,可以自定义函数 |
11
liujan 2020-02-26 13:09:13 +08:00 via iPhone
qlexpress 试试
|
12
leishi1313 2020-02-26 13:13:22 +08:00 via Android 1
老有人说做算法题没用,你把这俩题结合起来不就是你的需求了:
https://leetcode.com/problems/valid-number/ https://leetcode.com/problems/basic-calculator-ii/ |
13
qyvlik 2020-02-26 13:37:46 +08:00
可以参考这个项目 https://github.com/qyvlik/formula,支持变量替换计算。
具体是使用 JVM 自带的 ScriptEngine,移除 ScriptEngine 内的 `quit` 等有全局影响的函数, 创建可以参考如下: https://github.com/qyvlik/formula/blob/master/src/main/java/io/github/qyvlik/formula/modules/formula/service/impl/FormulaCalculatorImpl.java#L65 创建指定 "-strict", "--no-java", "--no-syntax-extensions" 参数,创建完毕后,移除不必要的有全局副作用的 js 函数。 此外可以考虑自己练手,使用 一些编译原理、逆波兰表达式等知识,自己实现四则计算器,还可以顺手防止恶意代码注入呢。 |
14
blackFool 2020-02-26 13:53:36 +08:00
com.googlecode.aviator
|
15
chocotan 2020-02-26 13:55:12 +08:00
|
16
lqw3030 2020-02-26 14:04:03 +08:00
中序表达式转前序表达式
|
17
jorneyr 2020-02-26 14:04:06 +08:00
也可以调用 Groovy 脚本
|
18
hhhsuan 2020-02-26 14:26:17 +08:00
轮子太多了,一搜一大把,比如这个: https://mathparser.org/
|
19
xupefei 2020-02-26 14:38:51 +08:00 via iPhone
|
20
mineqiqi 2020-02-26 15:03:23 +08:00
好像轮子挺多的
|
21
hantsy 2020-02-26 15:16:38 +08:00
@leishi1313 按照以前大学的数据结构课程,字符是不是应该用什么 FIFO 容器存放,一个个字符分析,加减乘除()有优先级不同。
|
22
HuHui 2020-02-26 15:16:54 +08:00
Apache Commons JEXL
|
23
ic2y 2020-02-26 22:26:07 +08:00
|
24
Comdex 2020-02-26 23:27:06 +08:00 via iPhone
中缀表达式
|
25
bjrjk 2020-02-27 00:09:22 +08:00 via Android
中缀表达式转后缀表达式再计算结果输出
|
26
leishi1313 2020-02-27 05:53:57 +08:00 via Android
@xupefei 3 要会员😂
|