假设我们有一个包含整数的项目列表:
USA: 3 people
Australia: 2 people
Germany: 2 people
如果我们计算每个值占整个列表总和的百分比,我们得到:
USA: 3/(3+2+2)*100 = 42.857...%
Australia: 2/(3+2+2)*100 = 28.571...%
Germany: 2/(3+2+2)*100 = 28.571...%
如果我们四舍五入,我们得到:
USA: 43%
Australia: 29%
Germany: 29%
总和 43+29+29 = 101 不是 100,这对软件用户来说有点奇怪。你会如何解决这个问题?
最佳答案
选举中使用的最大余数法可以引用:Wikipedia: Largest Remainder Method
在你的情况下,你有
USA: 42.857...
Australia: 28.571...
Germany: 28.571...
如果你取整数部分,你会得到
USA: 42
Australia: 28
Germany: 28
加起来是 98,你还想再拿两个。现在,你看一下小数部分,它们是
USA: 0.857...
Australia: 0.571...
Germany: 0.571...
取最大的,直到总数达到100。如果你取美国,总数变成99,你想再取一个。问题就出现在这里。由于澳大利亚和德国之间的平局为 0.571...,如果您同时选择两者,则总数将为 101。因此您有两种选择方式:
(a) 如果您强烈希望总数为 100,则只取澳大利亚,不要取更多:
USA: 43
Australia: 29
Germany: 28
(b) 如果您想尊重澳大利亚和德国打成平手的事实,您就到此为止:
USA: 43
Australia: 28
Germany: 28
关于ruby - 四舍五入后总和不为100怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5227215/