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.测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的狮子Li

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值