2013-05-07 134 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(); 
相关问题