Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将类型对象从engine.eval转换为int类型_Java_Javascript Engine_Scriptengine - Fatal编程技术网

Java 如何将类型对象从engine.eval转换为int类型

Java 如何将类型对象从engine.eval转换为int类型,java,javascript-engine,scriptengine,Java,Javascript Engine,Scriptengine,我的程序接受字符串输入,并使用ScriptEngine导入中的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

我的程序接受字符串输入,并使用ScriptEngine导入中的
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
}
}

您可以将其转换为
BigDecimal
,然后从中获取
intValue()

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

请注意,
intValue()
将修剪结果中的
Decimal
。如果要引发异常,如果发生这种情况,请使用
intValueExact()
,它会引发
算术异常

脚本引擎对任何算术表达式返回Double,因此将其强制转换为Double并使用其intValue方法

    int res = ((Double) eng.eval(s)).intValue();

出于好奇,我还有一个问题。假设我想将is转换为long类型。这将如何实现?这就是
BigDecimal
的赢家所在。使用
longValue()
而不是
intValue
    int res = ((Double) eng.eval(s)).intValue();