首页 > 解决方案 > 弹簧表达式 (SpEL) - 舍入

问题描述

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

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

或者这是 SpEL 的限制?

谢谢

标签: spring-el

解决方案


这对我有用:

"2.0/3"

结果是0.6666666666666666

是否有意义?

getValue(Double.class)这里消除了点,因为您2/3只是两个整数之间的运算,结果也是一个整数 - 0。并且只有在此之后,此结果才会转换为预期的 double 作为0.0.

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

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


推荐阅读