Прежде всего, убедитесь, что вы не используете числа с плавающей запятой для представления долларов и центов (почему см. Другие сообщения, но простая причина в том, что не все десятичные числа могут быть представлены как числа с плавающей запятой, например, 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);
}
Вы также можете добавить весь остаток к первой или последней записи. Наконец, в зависимости от потребностей бухгалтерского учета, вы также можете создать отдельную транзакцию для остатка.
person
Ted M. Young
schedule
11.01.2010
Office Space
- person Anurag   schedule 11.01.2010