繁体   English   中英

如何求解包含浮点值的MVEL中的表达式?

[英]How to solve expressions in MVEL containing Float Values?

我的表情是这样的: ($a+$b)/$c

String expr = "($a+$b)/$c";
Float sum = Float.valueOf("2.2");
HashMap<String, Float> valueMap =  new HashMap<String,Float>();
valueMap.put("$".concat(a)), sum);
sum = sum + Float.valueOf("1");
valueMap.put("$".concat(b)), sum );
sum = sum + Float.valueOf("1");
valueMap.put("$".concat(c)), sum );
VariableResolverFactory myVarFactory = new MapVariableResolverFactory();

Serializable compileExpression = MVEL.compileExpression(mtrExprD, valueMap); // here,     Only a map of < String,Object > is allowed.

MVEL.executeExpression(compileExpression, myVarFactory); // This should return me a float Value.

MVEL.executeExpression()返回一个Object; 我希望myExpression返回浮点值而不是对象。 如何解决呢?

Mvel总是返回该对象,我们需要检查instanceOf是否为BooleanFloat等。此外,在使用算术运算符进行计算时,请放心使用null安全值。

例如

您的exp是a * b ,如果a或b为null ,则Mvel给出的结果为false

MVEL#executeExpression  return the Object

您必须将其转换为Float

Float result = (Float) MVEL.executeExpression(compileExpression, myVarFactory);

像这样

Serializable  compiled = MVEL.compileExpression("x * y"); 
Map<String, Integer> vars = new HashMap<>();
    vars.put("x", new Integer(5));
    vars.put("y", new Integer(10));
    // Executes the compiled expression
Integer result = (Integer) MVEL.executeExpression(compiled, vars); 

请参阅Mvel 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM