JEXL оценивать возвращает int

1

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

Могу ли я изменить настройку, чтобы вернуть поплавок?

  • 0
    Вы можете попробовать изменить выражение на 7/2.0 ?
  • 0
    Кажется лучше, я получаю это сейчас: java.lang.ClassCastException: java.lang.Double не может быть приведен к java.lang.Float, но я могу преобразовать его с помощью result.floatValue (). Облом, хотя, потому что теперь я должен создать метод, чтобы добавить это десятичное число.
Показать ещё 1 комментарий
Теги:
jexl

2 ответа

2
Лучший ответ

7/2 будет оценивать результат int, и поэтому он не может использовать Integer для Float, если вы хотите, чтобы он был результатом float, вам нужно изменить выражение на 7/2.0F

  • 0
    отлично работает ....
0

Чтобы быть точным, вы должны преобразовать в Float любой из ваших параметров, поэтому используйте любой из них (7/2F) или (7F/2).

Однако из-за автоматической разблокировки Java вы можете избежать исключения в своем исходном коде, но, к сожалению, теряете точность, если используете

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

Другим методом, который будет работать, является литье в Double, поэтому (7/2D) или (7D/2) а затем используйте

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню