2013-05-07 75 views
1

我的程序需要一個字符串輸入並使用ScriptEngine導入中的engine.eval()進行計算。如何將評估值轉換爲int類型?如何將類型Object從engine.eval轉換爲類型int

import javax.script.ScriptEngine; 
import javax.script.ScriptEngineManager; 
import javax.script.ScriptException; 

public class Main { 

public static void main(String[] args) { 

    String s = "206 + 4"; 
    Object eval; 

    ScriptEngineManager mgr = new ScriptEngineManager(); 
    ScriptEngine eng = mgr.getEngineByName("JavaScript"); 

    try { 
     eval = eng.eval(s); 
    } catch (ScriptException e) { 
     System.out.println("Error evaluating input string."); 
    } 

//Convert Object eval to int sum 
} 
} 

回答

1

你可以將它轉換爲BigDecimal,然後從它那裏得到的intValue()

int val = new BigDecimal(eval.toString()).intValue(); 

注意intValue()將在結果修剪Decimal。如果你想拋出異常,萬一發生,使用intValueExact(),它會拋出一個ArithmeticException

+0

我還有一個問題是出於好奇。假設我想轉換爲輸入long。這將如何實現? – 2013-05-07 10:26:08

+1

這就是'BigDecimal'贏家的地方。使用'longValue()'而不是'intValue'。 – SudoRahul 2013-05-07 11:30:05

0
int i = Integer.valueOf((String) eval); 
1

的ScriptEngine返回雙人間任何算術表達式,所以它轉換爲雙並利用其方法的intValue

int res = ((Double) eng.eval(s)).intValue(); 
相關問題