在评估spring表达式后,无法获得小数点后的值

时间:2014-07-14 09:33:41

标签: java spring spring-el

我正在尝试做以下事情:

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 个答案:

答案 0 :(得分:0)

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

  1. 创建ScriptEngineManager对象。
  2. 从经理处获取ScriptEngine个对象。
  3. 使用ScriptEngine eval方法评估脚本。
  4. 例如:

    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");
        }
    }
    

答案 1 :(得分:0)

值均为“ 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