Я запускаю веб-приложение JSP, которое извлекает числовое значение из базы данных Oracle и отображает его на веб-странице. Я вручную ввел значение 2929.2, и запрос базы данных вручную подтверждает, что он хранится в качестве этого значения. Когда я получаю его через JSP, он отображается как 2929.199951172. Как я могу это исправить? Я использую ResultSets и метод getDouble(). Он хранится в Oracle как плавающий, но... и помиловал мою нообильность - из моего понимания, которое имеет такую же точность, как Java double, и getFloat() не то, что я ищу.
Я просмотрел несколько статей о BigDecimal, но я не решаюсь изменить все, если не знаю, что мне нужно.
Вы должны использовать BigDecimal
потому что его цель: обрабатывать значения с плавающей запятой с произвольной точностью. Из BigDecimal
javadoc:
Неизменяемые знаковые числа с произвольной точностью.
BigDecimal
состоит из произвольного значения целочисленного целочисленного значения точности и 32-разрядной целочисленной шкалы.
Этот тип сильно используется при получении данных из полей DECIMAL
(или NUMERIC
) из базы данных, поскольку позволяет поддерживать точность значения, хранящегося в базе данных. Это специально используется в финансовых приложениях/операциях.
Кстати, вы также должны изменить тип, используемый в вашей базе данных Oracle, от FLOAT
до DECIMAL
.
Я не решаюсь изменить все, если не знаю, что мне нужно
Если вам нужно/нужно правильно обрабатывать эти числовые значения, вы должны изменить все на BigDecimal
.
BigDecimal
потому что это его цель: обработка полей в базе данных с точной точностью для значений с плавающей запятой.