Прежде всего, убедитесь, что вы не используете число с плавающей запятой для представления долларов и центов (см. Другие сообщения, почему, но простая причина в том, что не все десятичные числа могут быть представлены как числа с плавающей запятой, например, $ 1,79) .
Вот один из способов сделать это:
decimal total = 143.13m;
int numberOfEntries = 5;
decimal unadjustedEntryAmount = total / numberOfEntries;
decimal leftoverAmount = total - (unadjustedEntryAmount * numberOfEntries);
int numberOfPenniesToDistribute = leftoverAmount * 100;
int numberOfUnadjustedEntries = numberOfEntries - numberOfPenniesToDistribute;
Итак, теперь у вас есть нескорректированные суммы 28,62, а затем вы должны решить, как распределить остаток. Вы можете распределить дополнительные копейки каждому, начиная сверху или снизу (выглядит так, как вы хотите снизу).
for (int i = 0; i < numberOfUnadjustedEntries; i++) {
Console.WriteLine(unadjustedEntryAmount);
}
for (int i = 0; i < numberOfPenniesToDistribute; i++) {
Console.WriteLine(unadjustedEntryAmount + 0.01m);
}
Вы также можете добавить весь остаток к первой или последней записи. Наконец, в зависимости от потребностей бухгалтерского учета, вы можете также создать отдельную транзакцию для остатка.