JEXL评估返回int

时间:2014-12-23 20:00:16

标签: java jexl

JEXL evaluate返回int而不是float:

JexlEngine jexl = new JexlEngine();
Expression e = jexl.createExpression("7/2");
Float result = (Float)e.evaluate(null);

我收到此错误:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Float

我可以更改设置以返回浮动吗?

2 个答案:

答案 0 :(得分:3)

7/2表达式将计算为int结果,因此无法将Integer转换为Float,如果您希望将其转换为float,则需要将表达式更改为7 / 2.0F

答案 1 :(得分:1)

为了准确起见,您必须将任何参数转换为Float,因此请使用(7 / 2F)(7F / 2)中的任何一个。

但是,由于Java的自动拆箱,您可以在初始代码中避免异常,但遗憾的是,如果您使用

,则会失去精确度
Float result = (float)e.evaluate(null);

另一种方法是投射到Double,所以(7 / 2D)(7D / 2)然后使用

Float result = e.evaluate(null).floatValue();