سؤال

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
}
}
هل كانت مفيدة؟

المحلول

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.

نصائح أخرى

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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top