Spring 表达式 (SpEL) - 四舍五入

Spring Expression (SpEL) - Rounding

在使用 SpEL 评估数学运算时,有没有办法指定舍入精度? 例如

ExpressionParser parser  = new SpelExpressionParser();
Expression exp = parser.parseExpression("2/3");
exp.getValue(Double.class); //returns 0.0 instead of 0.666666667

或者这是 SpEL 的限制?

谢谢

这对我有用:

"2.0/3"

结果是 0.6666666666666666.

有道理吗?

getValue(Double.class) 的要点在这里被删除了,因为你的 2/3 只是两个整数之间的运算,结果也是一个整数 - 0。 只有在那之后,这个结果才被转换为预期的双精度值作为 0.0.

您需要在表达式中明确说明您将要处理双打。

您可能认为这是一个限制,但 getValue(Double.class) 不是像 Java 中那样的 casting 操作。这是一个 post 转换。因此,精度会丢失,因为您的表达式无论如何都会计算为整数。

这适用于搜索“SpEL 舍入精度”的像我这样的搜索者。如果您已经在 script/expression 中使用它,例如 {{car.price}},您可以添加 .doubleValue()。所以它将是 {{car.price.doubleValue()}},您也可以执行 {{car.price.doubleValue()+conditioner.price.doubleValue()}}。它提供了更高的精度..