Frage

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
}
}
War es hilfreich?

Lösung

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.

Andere Tipps

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);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top