меня одна валюта USD, которая хранится в центах?
Decimal всегда надо юзать
Почему всегда? Можно развёрнутый ответ по поводу моего кейса?
Смотря как привыкли писать. В среднем — есть, очень правильно это выглядит — что суммы денег хранятся и показываются как обычно. Но сломать всё через неправильные округления есть шанс и там и там. Просто чуть-чуть в разных местах. А как проще конкретно вам — это вам виднее.
А что такое неправильное округление? Decimal в postgres как я понимаю не даёт мне выбора в том, как я буду откруглять (в отличие от BigDecimal в Java, например). Получается проще мне хранить всё в BigInt, вычисления делать у себя в Java и сохранять уже округлённое как мне нужно Или я не прав?
Неправильное округление — это округление, несоответствующее бизнес-требованиям.
Если ВАМ проще хранить в bigint и других программистов на проекте нет — то хранить, конечно, надо в bigint. Собственно, примерно это я и написал в первом ответе.
А почему bigint не подходит когда есть дургие программисты?
Я этого не говорил.
и других программистов на проекте нет или я не так понял?
Если вычисления на BigDecimal в java, то нет смысла хранить в bigint, при хранении никаких округлений не будет ведь.
А если я работаю с деньгами в центах. При вычислении процента у меня получаются нецелые числа, я округляю до целых тем методом, что мне нужен (благодаря BigDecimal) и сохраняю как bigint Или лучше работать с bigdecimal в долларах, а не центах и, соответственно, хранить как доллары в decimal?
Это оффтопик здесь, но в BigDecimal вы можете округлять до любого разряда, который вам нужен. Не обязательно округлять до целого. Конвертация к нужному разряду (ден.единица <=> центы) - один из источников потенциальных ошибок в коде, я бы постарался такие конвертации минимизировать.
Наверное, вопрос как конвертировать и нужно ли хранить дроби, больше вопрос бизнеса чем технический. Поэтому да, скорее всего это уже оффтоп, но спасибо
Обсуждают сегодня