Как обращаться с точностью при работе с валютой в MySQL и переполнении стека

У меня есть три поля в таблице счетов:

subtotal    decimal(12,4)
tax_amount  decimal(12,4)
total       decimal(12,4)

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

           stored value     displayed (rounded)
value
subtotal    165.1610         165.16
tax_amount  24.7742          24.77
total       189.9352         189.94

Сохраненные значения складываются. total столбец рассчитывается путем сложения subtotal а также tax_amount значения в PHP. Округление было сделано правильно, но 165,16 + 24,77 = 189,93 и НЕ 189,94.

Как я могу справиться с этими ситуациями? Это не всегда так.

2

Решение

Округлите сохраненные значения с точностью до копейки. Когда вы рассчитываете сумму или промежуточный итог с использованием PHP, суммируйте закругленный ценности.

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

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

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

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

Что бы вы ни выбрали, будьте последовательны!

2

Другие решения

Других решений пока нет …