ruby - 四舍五入后总和不为100怎么办?

标签 ruby rounding

假设我们有一个包含整数的项目列表:

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/

相关文章:

ruby - 如何在 Ruby 中获得惰性数组?

ruby-on-rails - Rails faye 服务器无法启动

ruby-on-rails - 如何将特定的 gem 版本设置为默认版本?

java - 将 double 向下转型为 int 哪种舍入模式?

java - 将 BigDecimal 舍入到最接近的 5 美分

ruby-on-rails - Rails 4 - 未初始化的常量 SessionController

ruby - 使用正则表达式拒绝数组中的项目的语法

python - 你如何四舍五入一个数字?

Java 舍入( double )

python - 在不使用 round() 的情况下在 python 中舍入整数