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