Выбор формата

PostgreSQL описывает numeric как тип для точных значений, в том числе денежных сумм. Заданный scale может округлить значение при записи. Целые числа в минимальных единицах тоже работают, если явно хранить валюту и масштаб. Для тарифа и промежуточных расчётов часто требуется больше знаков, чем для суммы проводки. PostgreSQL · Numeric types ↗

Разница на трёх комиссиях

Возьмём три условные комиссии по 0,005. Если каждую округлить до цента по правилу половины вверх, получится 0,03. Если сперва сложить и округлить 0,015, результат составит 0,02. Точная арифметика в обоих случаях одинакова, а расхождение создаёт правило агрегации.

Что сохранять для аудита

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