Я работаю над приложением, которое требует денежных расчетов, поэтому мы используем BigDecimal
для обработки таких чисел.
В настоящее время я храню BigDecimals как строку в базе данных PostgreSQL. Это имело для меня наибольшее значение, потому что теперь я уверен, что числа не потеряют точность, в отличие от того, когда они хранятся в базе данных как двойные числа.
Дело в том, что я не могу сделать много запросов для этого (т. Е. «Меньше X» для числа, хранящегося в виде текста, невозможно)
Для чисел, для которых мне нужно выполнять сложные запросы, я просто создаю новое значение столбца с именем indexedY (где Y - имя исходного столбца). Т.е. у меня есть количество (строка) и indexedAmount (двойной). Я конвертирую сумму в indexedAmount, вызывая toDouble()
в экземпляре BigDecimal.
Теперь я просто делаю запрос, а затем, когда таблица найдена, я просто конвертирую строковую версию того же числа в BigDecimal и снова выполняю запрос (на этот раз для извлеченного объекта), просто чтобы убедиться, У меня не было ошибок округления при передаче двойного числа (из приложения в БД и обратно в приложение)
Мне было интересно, смогу ли я избежать этого дополнительного шага по созданию столбцов indexedY.
Итак, мой вопрос сводится к следующему: безопасно ли просто сохранять результат BigDecimal в виде двойного в таблице (PostgreSQL) без потери точности?