java 字符串公式及條件判斷表達式,計算方法

//頭文件

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		
}

 

發佈了55 篇原創文章 · 獲贊 26 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章