はじめに
Ruby silver認定試験の勉強をしていた際に、小数点系のメソッドで気づきがあったのでまとめてみました。
round
使う機会が割と多いのではないでしょうか。
挙動は以下の通り。
・自身から最も近い整数のうち最大のものを返す
・最も近い整数が2つある場合は0から遠い方を返す(いわゆる四捨五入ですね)
> 1.9.round
=> 2
> 1.4.round
=> 1
> 1.5.round
=> 2
> -1.4.round
=> -1
> -1.5.round
=> -2
・引数に数値を渡すことで、引数の小数点の位を四捨五入します
> 1.15.round
=> 1
> 1.15.round(1)
=> 1.2
・half:
オプションで最も近い整数が2つある場合の丸め方を指定できます
> 2.5.round(half: :up)
=> 3
> 2.5.round(half: :even)
=> 2
> 2.5.round(half: :down)
=> 2
:up
0から遠い方に丸められます。
:even
もっとも近い偶数に丸められます。
:down
0に近い方に丸められます。
※rubyリファレンスより
floor
続いてfloorメソッド
挙動は以下の通り
・それ自身より小さな整数のうち最大のものを返します(ここポイント)
> 1.9.floor
=> 1
> 1.1.floor
=> 1
> -1.9.floor
=> -2
> -1.1.floor
=> -2
初歩的ですが、自分は切り捨てされるメソッドとして認識していたため、
負の数の場合も切り捨てされると思っていました。
レシーバーが負の数の場合「それ自身より小さな整数のうち最大のもの」という条件だと
(0から遠い方に)切り上げになるんですね。
ceil
こちらはfloorメソッドの逆になります。
・それ自身より大きな整数のうち最小のものを返します
> 1.9.ceil
=> 2
> 1.1.ceil
=> 2
> -1.1.ceil
=> -1
> -1.9.ceil
=> -1
floorメソッドと同じパターンで、レシーバーが正の数の場合と負の数の場合で挙動が異なりますね。
truncate
・それ自身と0の間にある整数のうち最も近いものを返します(小数点以下を切り捨て)
> 1.9.truncate
=> 1
> 1.1.truncate
=> 1
> -1.9.truncate
=> -1
> -1.1.truncate
=> -1
引数で切り捨てる桁数を指定でき、-(マイナス)を指定すると整数部分の桁を切り捨てます。
> 1.19.truncate(1)
=> 1.1
> 12.34.truncate(1)
=> 12.3
> 12.34.truncate(-1)
=> 10
abs(おまけ)
切り上げ切り捨て系メソッドではありませんが、
同じシーンで使われることもあるかと思いますので記載しておきます。
・自身の絶対値を返します
> -1.abs
=> 1
> 1.abs
=> 1
> -123.abs
=> 123