java 使用JEP 进行节点计算

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();
        }

    }

3.测试

猜你喜欢

转载自blog.csdn.net/weixin_40461281/article/details/105688591