Почему деление JSP/JSTL на 1000 иногда дает остаток?

При делении на 1000 я иногда сталкиваюсь с ошибкой, которая не делает деление "правильно". Например, при делении 90.55 на 1000 вместо получения.09055 я получаю.090549999999.

<c:out value="${bean.paPrice / 1000}" />

Почему это происходит? Это результат математики с плавающей точкой? Поиск в Google, казалось, показал, что это может быть виновником, но я не нашел конкретного ответа.

Чтобы исправить это, я могу округлить ответ до 5 цифр, но, похоже, это всего лишь патч для более глубокой проблемы.

<fmt:formatNumber type="number" maxFractionDigits="5" value="${bean.paPrice / 1000}" />

3 ответа

Решение

Это не проблема, это просто естественный результат двоичного представления с плавающей запятой. Округли свои ценности и не беспокойся об этом.

Почему компьютеры сосут в математике?

http://www.codinghorror.com/blog/archives/001266.html

Да, это распространенная проблема формата с плавающей точкой.

Другие вопросы по тегам