代码之家  ›  专栏  ›  技术社区  ›  Shaan

在计算弹簧表达式后,无法获取十进制之后的值

  •  0
  • Shaan  · 技术社区  · 10 年前

    我正在尝试做以下事情:

    String value = "10/3"; 
    ExpressionParser parser = new SpelExpressionParser();
    final Expression expression = parser.parseExpression(value);
    System.out.println("value1: "+expression.getValue(Double.class));
    System.out.println("value2: "+expression.getValue());
    

    输出:

    value1: 3.0
    value2: 3
    

    我无法获取十进制之后的值。上述值可以是任何数学表达式,如 (3/4*5+10) 所以我读不到这个字符串。

    2 回复  |  直到 10 年前
        1
  •  0
  •   Konstantin Yovkov    10 年前

    对于像您这样的简单数学表达式,而不是使用SpEL ExpressionParser ,您可以使用 Java Scripting API 。您需要遵循三个步骤:

    1. 创建 ScriptEngineManager 对象
    2. 获取 ScriptEngine 对象。
    3. 使用 脚本引擎 eval 方法。

    例如:

    import javax.script.*;
    public class EvalScript {
        public static void main(String[] args) throws Exception {
            ScriptEngineManager factory = new ScriptEngineManager();
            ScriptEngine engine = factory.getEngineByName("JavaScript");
            engine.eval("3/4*5 + 10");
        }
    }
    
        2
  •  0
  •   Thomas Jahncke    4 年前

    值为“10/3”时,两者都是整数,因此执行整数除法。如果要获取十进制值,其中一个值必须是十进制,例如:

    String value = "10/3"; 
    

    完整示例:

        String value = "10/3.0";
        ExpressionParser parser = new SpelExpressionParser();
        final Expression expression = parser.parseExpression(value);
        System.out.println("value1: "+expression.getValue(Double.class));
        System.out.println("value2: "+expression.getValue());
    

    输出:

    value1: 3.3333333333333335
    value2: 3.3333333333333335