Разница между Java и postgres значением BigDecimal/numeric

Я использую тип BigDecimal в проекте Java. Я пытаюсь сохранить его, используя функцию с числовым полем. Java и postgres имеют разное значение. Например. Значение 56,97 из Java сохраняется как 56,9699999999999989 в postgres. Как я могу предотвратить это?


person Bob    schedule 24.02.2020    source источник
comment
Каков именно тип данных столбца в базе данных?   -  person a_horse_with_no_name    schedule 24.02.2020
comment
.. и как вы сохраняете значение на стороне Java?   -  person Kayaman    schedule 24.02.2020
comment
@a_horse_with_no_name В конце есть столбец varchar   -  person Bob    schedule 24.02.2020
comment
@Kayaman Я получаю его из json и делаю запрос на сохранение с помощью функции postgres.   -  person Bob    schedule 24.02.2020
comment
Проверьте этот вопрос: Какой тип столбца PostgreSQL следует использовать для хранения Java BigDecimal?   -  person Alex    schedule 24.02.2020
comment
Никогда не сохраняйте числа в столбце varchar.   -  person a_horse_with_no_name    schedule 24.02.2020
comment
Как преобразовать это значение varchar в число в операторе SELECT?   -  person a_horse_with_no_name    schedule 24.02.2020
comment
@Bob вместо того, чтобы описывать, что вы делаете, как насчет редактирования вопроса и отображения соответствующих частей кода. Вы уже делаете что-то неправильно, сохраняя числовые данные в виде текста, но вы можете делать и другие вещи неправильно.   -  person Kayaman    schedule 24.02.2020
comment
@a_horse_with_no_name inValue = inValueFloat::varchar(100); Является ли это главной проблемой?   -  person Bob    schedule 24.02.2020


Ответы (1)


Если вы перейдете к документам postgresql: https://www.postgresql.org/docs/current/datatype-numeric.html

Я предполагаю, что вы используете реальную или двойную точность, которые описываются как «переменная точность, неточная».

Если вы хотите, чтобы это было точно, скажем, мы говорим о деньгах или чем-то подобном, тогда вы должны использовать типы numeric или decimal:

NUMERIC(precision, scale)

Точность — это общее количество цифр, а масштаб — это количество цифр в дробной части.

Например, число 1234,567 имеет точность семь и масштаб три.

person peprumo    schedule 24.02.2020
comment
BigDecimal в Java не является реальной или двойной точностью. - person Laurenz Albe; 24.02.2020
comment
Я имею в виду, что в PostgreSQL вещественная или двойная точность являются числовыми типами в почтовых индексах. Но если вам нужны точные данные, вы должны использовать числовые или десятичные числа. - person peprumo; 24.02.2020
comment
А, теперь я понял. ОП не имел в виду numeric, когда сказал числовой. - person Laurenz Albe; 25.02.2020