Проблема округления Java с BigDecimal и вычисления

У меня есть набор данных, который состоит из BigDecimal номера. Я хочу представить это в отчете. Мне удалось создать отчет в следующем формате. Это несколько похоже на пробный баланс в бухгалтерском учете. Но это не так! Данные в таблице имеют 4 десятичных знака в своих значениях. Но в отчете оно должно быть округлено до двух знаков после запятой. Отчет также должен быть точным, поэтому использование BigDecimal,

+--------+---------+--------+
|Account | Debits  | Credits|
+--------+---------+--------+
|A       | 0.2760  | 0.1630 |
+--------+---------+--------+
|B       | 0.2770  | 0.2640 |
+--------+---------+--------+
|Total   | 0.5530  | 0.4270 |
+--------+---------+--------+

Реальная проблема заключается в том, когда дело доходит до отображения итогов. Итоги не будут складываться должным образом после округления.

+--------+---------+--------+
|Account | Debits  | Credits|
+--------+---------+--------+
|A       | 0.28    | 0.16   |
+--------+---------+--------+
|B       | 0.28    | 0.26   |
+--------+---------+--------+
|Total   | 0.55    | 0.43   |
+--------+---------+--------+

Я использую HALF_EVEN режим округления, потому что он используется для бухгалтерского учета, а также потому, что этот случай также включает в себя финансовые показатели.

Я могу добавить это после округления значений. тогда отчет с расчетами будет в порядке. Но это не будет представлять фактическое значение, которое находится в базе данных (.553 близко к.55, но если я добавлю его после округления, результат будет.56, .553 не близко к.56).

Есть ли способ преодолеть эту проблему? Я посмотрел вокруг, чтобы увидеть, как составляются отчеты о пробном балансе, но я не смог найти правильного решения для этого?

РЕДАКТИРОВАТЬ 1

Я видел отчеты о пробном балансе в финансовых системах, как это, они делают вычисления после округления? Я продолжаю сравнивать это с отчетом о пробном балансе, так как этот отчет похож на один.

РЕДАКТИРОВАТЬ 2
Можно ли рассчитывать округленные значения? Я узнал, что вычисление округленного значения не рекомендуется, поскольку исходные значения отбрасываются.

РЕДАКТИРОВАТЬ 3 На основе @MarcioB, @user3679868 и @JoopEggen решили сделать расчеты на основе округленных значений. Разница.047 (.56 - .553), очевидно, списана (стандарт аудита)!

2 ответа

Решение

Поскольку вы округляете каждую учетную запись, если хотите, чтобы общая сумма равнялась сумме учетных записей, вам придется вычислять общую сумму, используя округленные значения для учетных записей.

Если вы используете округление в одной таблице и не используете его на другой, у вас всегда будет эта проблема, независимо от метода округления.

Здесь мы используем полное число для исчисления и усекаем его в отчетах.

Другие вопросы по тегам