在代码中解决这个问题的最佳方法是什么?
问题是我有 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 美分折扣)
底池总数应与原始总数相匹配。
我想我可能遗漏了一些东西,或者可能需要采取额外的步骤。我认为我在正确的轨道上。
任何帮助将不胜感激。