1. 程式人生 > >計算從資料庫中取出的公式

計算從資料庫中取出的公式

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.jexl2.Expression;
import org.apache.commons.jexl2.JexlContext;
import org.apache.commons.jexl2.JexlEngine;
import org.apache.commons.jexl2.MapContext;

public class Test {
	public static void main(String[] args) {
        		// 執行字串表示式:(k-(x-y)*0.1),進行計算
		Map<String, Object> map = new HashMap<String, Object>();
		map.put("k", 10);
		map.put("x", 2);
		map.put("y", 4);
		String formula = "k-(x-y)*0.1";
		Object result = convertToCode(formula,map);
		System.out.println(result);
        }

	/**
	 * java將字串轉換成可執行程式碼 工具類
	 * 
	 * @param jexlExp
	 * @param map
	 * @return
	 */
	private static Object convertToCode(String jexlExp, Map<String, Object> map) {
		JexlEngine jexl = new JexlEngine();
		Expression e = jexl.createExpression(jexlExp);
		JexlContext jc = new MapContext();
		for (String key : map.keySet()) {
			jc.set(key, map.get(key));
		}
		if (null == e.evaluate(jc)) {
			return "";
		}
		return e.evaluate(jc);
	}
}