2.X 存在精确度问题 推荐使用3.X 参考文章: java 使用 jep3.5 解析公式自动计算(包含BigDecimal模式 浮点数精准计算)
1.JEP基础相关
请参考: java 使用JEP解析字符串计算公式 求值(附带自定义函数编写)
2.使用节点计算
注释写的很明白 要仔细看
public static void main(String[] args) {JEP jep = new JEP();// 允许使用未声明变量jep.setAllowUndeclared(true);// 允许赋值jep.setAllowAssignment(true);// 添加常用函数jep.addStandardFunctions();// 添加常用常量jep.addStandardConstants();// 添加自定义函数jep.addFunction("min", new Min());jep.addFunction("max", new Max());// 创建公式String exp = "a=M12*3.14/4*pow(O5,2)*(K11+273-G11)/(G12*sqrt(3.14*M11*P11))";String mins = "b=min(H5,U7)";String mul = "a*b";// 给变量赋值jep.addVariable("M12", 1.1);jep.addVariable("O5", 11.28665296);jep.addVariable("K11", 25);jep.addVariable("G11", 200);jep.addVariable("G12", 100000);jep.addVariable("M11", 0.000000129);jep.addVariable("P11", 10);jep.addVariable("H5", 1.2);jep.addVariable("U7", 2.4);try {// 创建节点Node node1 = jep.parse(exp);Node node2 = jep.parse(mins);Node node3 = jep.parse(mul);// 计算节点Double a = (Double)jep.evaluate(node1);Double b = (Double)jep.evaluate(node2);Double result = (Double)jep.evaluate(node3);System.out.println("a="+a);System.out.println("b="+b);System.out.println("a*b="+result);} catch (ParseException e) {e.printStackTrace();}}