Обычно в финансах работают с целыми числами, представляющими собой тысячные (иногда и десятитысячные) доли рубля. Доли, по возможности, представляют натуральными дробями. В этом случае ваша задача преобразуется из (12.50 * 0.2) в (12500 * 2 / 10). При целочисленных вычислениях минимизируется погрешность самих расчётов.
Следующая проблема - округление до целых копеек при сложении. Если мы получили 0.3 и 0.4 копейки (3 и 4 в тысячных долях рубля), то при их округлении получим 0.3 ≈ 0 и 0.4 ≈ 0, а при округлении их суммы получим 0.3 + 0.4 = 0.7 ≈ 1. То есть в результате будет 0 + 0 = 1.
Для решения такой проблемы применяют системное округление. Сначала все слагаемые округляются с отбрасыванием дробной части, а их сумма округляется по общим правилам. Вычтя из округлённой суммы сумму округлённых слагаемых получим количество единиц, которые надо раскидать. Затем исходные слагаемые сортируются по убыванию дробной части и соответствующее их количество округляется вверх.
Скажем слагаемые у нас 1.6, 2.7 и 3.8.
Их сумма 1.6 + 2.7 + 3.8 = 8.1
Если округлить слагаемые по общим правилам, то получим 2 + 3 + 4 = 9 ≠ 8
Округляем их с отбрасыванием: 1 + 2 + 3 = 6
Округлённая сумма 8.1 ≈ 8
8 - 6 = 2, значит два слагаемых с наибольшей дробной частью надо округлить вверх.
3.8 ≈ 4, 2.7 ≈ 3, 1.6 ≈ 1
4 + 3 + 1 = 8