В настоящее время некоторые из наших объектов Hibernate используют Doubles для хранения денежных сумм, база данных хранит это значение как числовое (10,2). Расчет этих денежных двойных сумм всегда рассчитывается с использованием BigDecimals, а затем значение объекта устанавливается как двойное.
Пример:
Order order = new Order();
OrderLineItem line = new OrderLineItem(1.0, 450.00);
BigDecimal orderValue = BigDecimal.valueOf(line.getQty())
.multiply(BigDecimal.valueOf(line.getAmount()));
order.setOrderTotal(orderValue.setScale(2, ROUND_HALF_EVEN).doubleValue());
До сих пор это работало нормально, однако мне интересно, есть ли у этого какие-либо потенциальные риски для какой-то ошибки округления.
Мысли?
long. Вы никогда не должны использовать значения с плавающей запятой для денег, и BigDecimal не нужен. Просто используйтеlongs. - person Luigi Plinge   schedule 26.08.2011