Как лучше всего решить эту проблему в коде?
Проблема в том, что у меня есть 2-долларовые суммы (известные как банк), которые нужно распределить на 3 человека. Каждый человек получает определенную сумму, которая поступает из обоих банков, и ставки должны быть примерно одинаковыми. Я продолжаю сталкиваться с проблемами округления, когда мои ассигнования либо слишком много, либо слишком мало.
Вот конкретный пример:
Горшок № 1 987 654,32
Пот № 2 123 456,78
Человек № 1 получает сумму выделения: 345 678,89
Лицо № 2 получает сумму распределения: 460 599,73
Лицо № 3 получает сумму распределения: 304 832,48
Моя логика следующая (код на c #):
foreach (Person person in People)
{
decimal percentage = person.AllocationAmount / totalOfAllPots;
decimal personAmountRunningTotal = person.AllocationAmount;
foreach (Pot pot in pots)
{
decimal potAllocationAmount = Math.Round(percentage * pot.Amount, 2);
personAmountRunningTotal -= potAllocationAmount;
PersonPotAssignment ppa = new PersonPotAssignment();
ppa.Amount = potAllocationAmount;
person.PendingPotAssignments.Add(ppa);
}
foreach (PersonPotAssignment ppa in person.PendingPotAssignments)
{
if (personAmountRunningTotal > 0) //Under Allocated
{
ppa.Amount += .01M;
personAmountRunningTotal += .01M;
}
else if (personAmountRunningTotal < 0) //Over Allocated
{
ppa.Amount -= .01M;
personAmountRunningTotal -= .01M;
}
}
}
Результаты, которые я получаю, таковы:
Банк № 1, Человек № 1 = 307 270,13
Пот № 1, Человек № 2 = 409 421,99
Пот № 1, Человек № 3 = 270 962,21
Пот # 1 Итого = 987 654,33 (1 пенни)
Горшок № 2, Человек № 1 = 38 408,76
Пот № 2, Человек № 2 = 51 177,74
Пот № 2, Человек № 3 = 33 870,27
Пот # 2 Итого = 123 456,77 (1 пенни)
Итоговые суммы банка должны совпадать с исходными.
Я думаю, что я что-то упускаю или, возможно, мне нужно сделать дополнительный шаг. Я думаю, что я на правильном пути.
Любая помощь будет принята с благодарностью.