Rubyで数値の切り捨て・切り上げ・四捨五入する

今回は Ruby の数値の切り捨て・切り上げ・四捨五入の方法について説明します。Ruby の標準ライブラリには数値を扱う便利なメソッドが用意されており、それを利用することで実現することができます。

切り捨て

浮動小数点数の切り捨てを行う場合は、Float クラスの floor メソッドを使用します。

1.4.floor # 1
1.5.floor # 1
-1.4.floor # -2
-1.5.floor # -2

浮動小数点数が負数の場合は、絶対値が大きい方に丸められます。

小数点以下 N 桁の切り捨て

Float クラスの floor メソッドでは、小数点以下の桁数は指定できません。そのため、数値を一度 BigDecimal に変換したのち、floor メソッドを指定します。floor メソッドの引数には小数点以下の桁数を指定します。

require 'bigdecimal'

BigDecimal(1.23456.to_s).floor(2).to_f # 1.24
BigDecimal(1.23456.to_s).floor(3).to_f # 1.234

BigDecimal のオブジェクトを生成するときは、引数に String を指定しなければならないので、to_s で Float を String に変換しています。さらに最後に to_f で Float に戻しています。

切り上げ

浮動小数点数の切り上げを行う場合は、Float クラスの ceil メソッドを使用します。

1.4.ceil  # 2
1.5.ceil  # 2
-1.4.ceil # -1
-1.5.ceil # -1

浮動小数点数が負数の場合は、絶対値が小さい方に丸められます。

小数点以下 N 桁の切り上げ

小数点以下 N 桁の切り上げを行うときは、切り捨てのときと同様に BigDecimal を使用します。

require 'bigdecimal'

BigDecimal((1.23456).to_s).ceil(2).to_f # 1.24
BigDecimal((1.23456).to_s).ceil(3).to_f # 1.235

四捨五入

数値を四捨五入する場合は、 round メソッドを使用します。

1.4.round # 1
1.5.round # 2
-1.4.round # -1
-1.5.round # -2

小数点以下 N 桁の四捨五入

round メソッドは引数に桁数を指定することができます。また、整数部の四捨五入を行いたい場合は、引数に負数を指定します。

1.23456.round(2) # 1.23
1.23456.round(3) # 1.235
123456.round(-2) # 123500
123456.round(-3) # 123000