java 自定义公式计算

大憨熊 提交于 2020-08-06 09:24:46

// 公式计算-自定义公式
    // 公式:运维单数F*系数f1 + 运单价格T*系数t1 +总价A*系数a1 +评价P*系数P1
    /*
     * <dependency> <groupId>org.codehaus.groovy</groupId>
     * <artifactId>groovy-all</artifactId> <version>2.4.7</version> </dependency>
     */
    public static double countGrovovy() {
        Binding binding = new Binding();
        // 值
        binding.setVariable("F", 150);
        binding.setVariable("T", 60000);
        binding.setVariable("A", 300000);
        binding.setVariable("P", 10);
        // 系数
        binding.setVariable("F1", 1.2);
        binding.setVariable("T1", 1.7);
        binding.setVariable("A1", 1.2);
        binding.setVariable("P1", 0.5);

        binding.setVariable("language", "Groovy");

        GroovyShell shell = new GroovyShell(binding);

        Object F1 = shell.evaluate("P2=F*F1 + T*T1 +A*A1 +P*P1; return P2 ");

        // Object F2 = shell.evaluate("P1=P0*(0.055*0.20+1.0011)+A; return P1 ");
        double d = (150 * 1.2) + (60000 * 1.7) + (300000 * 1.2) + (10 * 0.5);
        System.out.println("手动计算:" + d);
        System.out.println("自定义公式计算:" + F1);
        // System.out.println(F2);
        return Double.valueOf(F1.toString());
    }

    // 自定义公式2
    public static double countGrovovy2() {
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
        Compilable compilable = (Compilable) engine;
        Bindings bindings = engine.createBindings(); // Local级别的Binding
        String script = "F*F1 + T*T1 +A*A1 +P*P1"; // 定义函数并调用
        CompiledScript JSFunction = null; // 解析编译脚本函数
        try {
            JSFunction = compilable.compile(script);

            bindings.put("F", 150);
            bindings.put("T", 60000);
            bindings.put("A", 300000);
            bindings.put("P", 10);
            // 系数
            bindings.put("F1", 1.2);
            bindings.put("T1", 1.7);
            bindings.put("A1", 1.2);
            bindings.put("P1", 0.5);

            Object result = JSFunction.eval(bindings);

            System.out.println("自定义公式2:==" + result); // 调用缓存着的脚本函数对象,Bindings作为参数容器传入
            return Double.valueOf(result.toString());
        } catch (javax.script.ScriptException e) {
            e.printStackTrace();
            return 0;
        }
        // return Double.valueOf(result.toString());
    }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!