Search code examples
javajavascript-enginescriptengine

How to convert type Object from engine.eval to type int


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
}
}

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.