要取得字串 "(1+2)*3" 的計算結果值, 可以有以下幾種方式 :
利用 ScriptEngine 的範例 (Java 內建, 但 Android 不支援) :
程式碼
public class HelloTomKuoWorld { public static void main(String[] args) throws ScriptException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); // 連結變數 & 變數值 Mapvars = new HashMap (); vars.put("x", 3); // 每個變數都要定義 vars.put("y", 5); vars.put("z", 2); // 定義公式, 與取得計算結果 double vResult = (double)engine.eval( "(x+y)*z", new SimpleBindings(vars) ); // 透過 DecimalFormat 進行數值格式化 DecimalFormat df = new DecimalFormat(); df.applyPattern( "#.##" ); System.out.println( "result=" + df.format(vResult) ); // result=16 } }
利用 exp4j 的範例 (外掛套件) (Java, Android 都支援) :
程式碼
public class HelloTomKuoWorld { public static void main(String[] args) { // 定義公式 & 變數 Expression calc = new ExpressionBuilder("(x+y)*z") .variables("x", "y", "z") // 每個變數都要定義 .build(); // 連結變數 & 變數值 calc .setVariable("x", 3) // 每個變數值都要給定 .setVariable("y", 5) .setVariable("z", 2); // 取得計算結果 double vResult = calc.evaluate(); // 透過 DecimalFormat 進行數值格式化 DecimalFormat df = new DecimalFormat(); df.applyPattern( "#.##" ); System.out.println( "result=" + df.format(vResult) ); // result=16 } }