2017-02-16 75 views
5

Ruby 2.4使用高斯舍入来四舍五入浮点数。浮点四舍五入变化2.4

根据维基百科:

需要仲裁的规则是较少偏见(甚至当原始数字是正或不等概率负)是圆的一半,甚至。按照这个约定,如果y的分数是0.5,那么q是最靠近y的偶数。因此,例如,+ 23.5变为+24,+ 24.5也如此。而-23.5变成-24,和-24.5一样。

但是,在Ruby 2.4中执行以下代码会产生与预期不同的输出。

[1.5, 2.5, 3.5, 4.5, 5.5].each { | num | puts num.round } 
# output: 
2 
3 
4 
5 
6 
# expected output(based on Gaussian rounding): 
2 
2 
4 
4 
6 

有人可以解释为什么这样或我错过了什么?

回答

7

为了应用高斯舍入,您必须通过关键字参数:half

关键字参数:half可以采用:down:even,并且默认行为仍然是四舍五入,就像以前一样。

# ruby 2.4.0-rc1 
irb(main):001:0> (2.5).round 
# => 3 
irb(main):008:0> (2.5).round(half: :down) 
# => 2 
irb(main):009:0> (2.5).round(half: :even) 
# => 2 

该决定的背景是在this blog post