java自定义公式_java 自定义公式计算

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

// 公式:运维单数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());

}

来源:oschina

链接:https://my.oschina.net/mellen/blog/4466766

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值