【问题标题】:How to convert type Object from engine.eval to type int如何将类型 Object 从 engine.eval 转换为类型 int
【发布时间】:2013-05-07 09:41:31
【问题描述】:

我的程序接受一个字符串输入并使用来自 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
}
}

【问题讨论】:

    标签: java javascript-engine scriptengine


    【解决方案1】:

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

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

    请注意,intValue() 将修剪结果中的 Decimal。如果你想抛出异常,如果发生这种情况,请使用intValueExact(),它会抛出ArithmeticException

    【讨论】:

    • 出于好奇,我还有一个问题。假设我要转换的是 long 类型。这将如何实现?
    • 这就是BigDecimal 获胜的地方。使用longValue() 而不是intValue
    【解决方案2】:

    ScriptEngine 为任何算术表达式返回 Double,因此将其转换为 Double 并使用其 intValue 方法

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

    【讨论】:

      【解决方案3】:
      int i = Integer.valueOf((String) eval);
      

      【讨论】:

        猜你喜欢
        • 2018-11-12
        • 2019-06-22
        • 2016-03-12
        • 1970-01-01
        • 2020-06-17
        • 2014-02-20
        • 2020-10-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多