【Ruby入門】数値の基本と操作にて、数値の基本を解説しました。
ここではさらに発展させて、Rubyの数値に関する便利なメソッドを中心に解説します。
後半では、数値計算では欠かすことのできない切り捨て・切り上げ・四捨五入を解説します。上記リンクと合わせて読むと、数値の基本的操作ができるようになりますよ!
Rubyの数値を扱うメソッドあれこれ
Rubyには、数値を扱うメソッドが多数あります。ほんの一部になりますが、皆さんが使う可能性のあるものを解説します。
upto
ある数値からある数値まで昇順に処理するには、uptoを使います。
3.upto(6) do |i| puts i end
[実行結果]
3 4 5 6
3からループを開始し、6まで処理することができました。
downto
昇順のuptoがあればご想像通り、降順に処理するdowntoもあります。
6.downto(3) do |i| puts i end
[実行結果]
6 5 4 3
6から開始し、3まで減らしつつ処理することができました。
times
決められた回数繰り返すには、timesが便利です。
5.times do |i| puts i end
[実行結果]
0 1 2 3 4
5回繰り返すことができました。
切り上げ、切り下げ、切り捨て、四捨五入
Rubyの数値計算における切り上げ、切り下げ、切り捨て、四捨五入を解説します。
Rubyで小数点以下の計算をする to_f
単純に「100/14」とすると、小数点以下が切り捨てられて7とだけ表示されてしまいます。それを防ぐために、以下のようにします。
普通に100と書くと整数値扱いになります。まずはto_fを使い、小数点以下をもつ浮動小数点に変換する必要があります。
puts 100.to_f
[実行結果]
7.142857142857143
小数点以下を得ることができました。
切り上げ ceil
ceilを使い、切り上げをしてみましょう。
数値.ceilと引数をつけずに実行すると、小数点以下1位を切り上げます。正の引数をつけると、小数点以下を切り上げます。負数の引数をつけると、整数部分の切り上げになります。
puts 123.456.ceil(2) # 小数点以下2位で切り上げ puts 123.456.ceil # 小数点以下で切り上げ puts 123.456.ceil(-2) # 十の位で切り上げ
[実行結果]
123.46 124 200
正数で試しましたが、負数なら結果が変わります。
puts -123.456.ceil(2) # 小数点以下2位で切り上げ puts -123.456.ceil # 小数点以下で切り上げ puts -123.456.ceil(-2) # 十の位で切り上げ
[実行結果]
-123.45 -123 -100
何が起こったのか解説しましょう。
マイナスからプラスへと向かって切り上げられるからです。Rubyのマニュアルを見てみましょう
自身と等しいかより大きな整数のうち最小のものを返します。
123.456なら、小数点以下3位が存在しているから、より大きな123.46になります。しかし-123.456なら、小数点以下3位が存在しているから、直近に大きい数字-123.45となるわけです。
切り下げ floor
floorで切り上げができます。先ほどの例でfloorを見てみましょう。
puts 123.456.floor(2) # 小数点以下2位で切り下げ puts 123.456.floor # 小数点以下で切り下げ puts 123.456.floor(-2) # 十の位で切り下げ
[実行結果]
123.45 123 100
負数でも試しましょう。
puts -123.456.floor(2) # 小数点以下2位で切り下げ puts -123.456.floor # 小数点以下で切り下げ puts -123.456.floor(-2) # 十の位で切り下げ
[実行結果]
-123.46 -124 -200
切り下げはマイナス方向での処理ですので、上記のような結果となりました。
切り捨て truncate
truncateで切り捨てができます。引き続き同じ例で見てみましょう。
puts 123.456.truncate(2) # 小数点以下2位で切り捨て puts 123.456.truncate # 小数点以下で切り捨て puts 123.456.truncate(-2) # 十の位で切り捨て
[実行結果]
123.45 123 100
負数で試しましょう。
puts -123.456.truncate(2) # 小数点以下2位で切り捨て puts -123.456.truncate # 小数点以下で切り捨て puts -123.456.truncate(-2) # 十の位で切り捨て
[実行結果]
-123.45 -123 -100
切り捨てなので、正数・負数とも結果は変わりません。
四捨五入 round
最後に、四捨五入です。roundを使います。
puts 123.456.round(2) # 小数点以下2位で四捨五入 puts 123.456.round # 小数点以下で四捨五入 puts 123.456.round(-2) # 十の位で四捨五入
[実行結果]
123.46 123 100
負数でも試しましょう。
puts -123.456.round(2) # 小数点以下2位で四捨五入 puts -123.456.round # 小数点以下で四捨五入 puts -123.456.round(-2) # 十の位で四捨五入
[実行結果]
-123.46 -123 -100
こちらも結果は変わりません。
最大公約数 gcd、最小公倍数 lcm
Rubyには、なんと最大公約数と最小公倍数を求めるメソッドもあります。gcdとlcmです。
最大公約数 gcd
gcdを使って、125と100の最大公約数を求めましょう。
puts 125.gcd(100)
[実行結果]
25
最大公約数が出ました。
最小公倍数 lcm
同じ例を使って、今度はlcmを使って最小公倍数を求めましょう。
puts 125.lcm(100)
[実行結果]
500
最小公倍数が出ました。
まとめ
本記事では、昇順の数え上げや降順の数え下げ、四捨五入、ちょっとめずらしい最大公約数や最小公倍数を解説しました。
これらは数値計算では一般的なことなので、がんばって理解して、スマートな数値計算ができるようになってくださいね!