要取得字串 "(1+2)*3" 的計算結果值, 可以有以下幾種方式 :
利用 ScriptEngine 的範例 (Java 內建, 但 Android 不支援) :
程式碼
public class HelloTomKuoWorld
{
public static void main(String[] args) throws ScriptException
{
ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
// 連結變數 & 變數值
Map vars = 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
}
}
