//头文件
import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
//公式计算
private float ExecutionStrFormula(Map<String,Object> thfuInfo,String formulaStr)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Compilable compilable = (Compilable) engine;
Bindings bindings = engine.createBindings(); //Local级别的Binding
CompiledScript JSFunction = null; //解析编译脚本函数
try {
JSFunction = compilable.compile(formulaStr);
bindings.put("S", (float)thfuInfo.get("thfu_s"));
bindings.put("A", (float)thfuInfo.get("thfu_a"));
Object result = JSFunction.eval(bindings);
return StringUtils.toFloat(result);
} catch (ScriptException e) {
e.printStackTrace();
return 0.0f;
}
}
//条件表达式计算
private static boolean ExecutionStrConditional(String formulaStr,float thefGrade)
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Compilable compilable = (Compilable) engine;
Bindings bindings = engine.createBindings(); //Local级别的Binding
CompiledScript JSFunction = null; //解析编译脚本函数
try {
JSFunction = compilable.compile(formulaStr);
bindings.put("G",thefGrade);
Object result = JSFunction.eval(bindings);
//return StringUtils.toFloat(result);
return Boolean.parseBoolean(result.toString());
} catch (ScriptException e) {
e.printStackTrace();
return false;
}
}
//调用方法
public static void main(String[] args){
Map<String ,Object> thboMap = Maps.newHashMap();
thboMap.put("thfu_s",1.1f);
thboMap.put("thfu_a",1.2f);
ExecutionStrFormula(thboMap,"-0.00026*A*A+0.022*A+0.01");
ExecutionStrFormula(thboMap,"8271");
ExecutionStrFormula(thboMap,"-0.227*S*S+1.789*S +0.002");
System.out.println(ExecutionStrConditional("true",850));//所有规模
System.out.println(ExecutionStrConditional("G<=8",5));//≤8
System.out.println(ExecutionStrConditional("G>=9&&G<=19",10));
System.out.println(ExecutionStrConditional("G>=750",850)); //≥750
}