JEXL оценивает возврат 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
Могу ли я изменить настройку, чтобы вернуть поплавок?
7/2
будет оценивать результат int, и поэтому он не может использовать Integer для Float, если вы хотите, чтобы он был результатом float, вам нужно изменить выражение на 7/2.0F
Чтобы быть точным, вы должны преобразовать в Float любой из ваших параметров, поэтому используйте любой из них (7/2F)
или (7F/2)
.
Однако из-за автоматической разблокировки Java вы можете избежать исключения в своем исходном коде, но, к сожалению, теряете точность, если используете
Float result = (float)e.evaluate(null);
Другим методом, который будет работать, является литье в Double, поэтому (7/2D)
или (7D/2)
а затем используйте
Float result = e.evaluate(null).floatValue();
7/2.0
?