// 公式计算-自定义公式

// 公式:运维单数F*系数f1 + 运单价格T*系数t1 +总价A*系数a1 +评价P*系数P1

/*

* org.codehaus.groovy

* groovy-all2.4.7

*/

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

}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐