Spring Expression (SpEL) - округление - PullRequest
0 голосов
/ 22 марта 2019

Есть ли способ указать точность округления при оценке математической операции с использованием SpEL? Например

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

Или это ограничение в SpEL?

Спасибо

1 Ответ

1 голос
/ 22 марта 2019

Это работает для меня:

"2.0/3"

и результат 0.6666666666666666.

Имеет ли это смысл?

Точка getValue(Double.class) здесь исключена, поскольку ваш 2/3 - это просто операция между двумя целыми числами, а результатом также является целое число - 0. И только после этого этот результат конвертируется в ожидаемый дубль как 0.0.

Вы должны явно указать в выражении, что вы собираетесь иметь дело с двойными числами.

Вы можете рассматривать это как ограничение, но getValue(Double.class) - это не приведение операции, как в Java. Это пост-конверсия. Поэтому точность просто теряется, потому что ваше выражение в любом случае оценивается как целое число.

...