Question

My program takes a String input and calculates it using engine.eval() from ScriptEngine imports. How do I convert the evaluated value to type 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
}
}
Was it helpful?

Solution

You can convert it to a BigDecimal and then get the intValue() from it.

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

Note that intValue() will trim the Decimal in the result. If you want to throw an exception, in case that is happening, use intValueExact() which throws an ArithmeticException.

OTHER TIPS

ScriptEngine returns Double for any arithmetic expression, so cast it to Double and use its intValue method

    int res = ((Double) eng.eval(s)).intValue();
int i = Integer.valueOf((String) eval);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top