2017-02-16 11 views
5

Ruby 2.4では、浮動小数点数を丸めるためにガウスの丸めを使用しています。ウィキペディアによればRubyにおける浮動小数点丸めの変化2.4

(元の番号が等しくない確率で正または負であっても)少ないバイアスさタイブレーク規則はさえに半円形です。この規約では、yの割合が0.5の場合、qはyに最も近い偶数の整数です。従って、例えば、+ 23.5は+24.5、+ 24.5は+24、 -23.5は-24.5と同様-24になります。

ただし、次のコードを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です。

関連する問題