除算による商と剰余を取得する

数値に対する四則演算の中で商については「/」で剰余については「%」で取得することができますが、メソッドを使って取得することもできます。ここでは Ruby で除算による商と剰余を取得する方法について解説します。

※ 四則演算については「四則演算」を参照して下さい。

(Last modified: )

商を取得する

商を求めるには Integer クラスで用意されている div メソッドを使います。 Numericクラスで「div」メソッドと「quo」メソッドが用意されています。

div(other)

引数には除算する数値を指定します。結果として整数の商を取得します。例えば次のようになります。

puts(19.div(3))     # 6

この場合は 19 を 3 で割った商として 6 を取得します。

また Float クラスでは div メソッドは用意されていませんが、上位クラスの Numeric クラスで <div メソッドが用意されています。

div(other)

引数には除算する数値を指定します。結果として整数の商を取得します。例えば次のようになります。

puts(25.72.div(6))  # 4

この場合は 25.72 を 6 で割った商として 4 を取得します。

整数ではない商を求めるには Numeric クラスで用意されている quo メソッドを使います。

quo(other)

quo メソッドは除算の対象である数値が整数でも浮動小数点数でも浮動小数点数の商を取得します。例えば次のようになります。

puts(19.quo(3))     # 19/3
puts(25.72.quo(6))  # 4.286666666666666

なお / メソッドを使って商を取得する場合、除算の対象の数値及び除算する数値が共に整数の場合に整数の商を取得し、除算の対象又は除算する数値のどちらか1つでも浮動小数点数の場合は浮動小数点数の商を取得します。

これら3つのメソッドの違いは次の通りとなります。

除算の対象除算する数値/divquo
整数整数整数整数浮動小数点数
整数浮動小数点数浮動小数点数整数浮動小数点数
浮動小数点数整数浮動小数点数整数浮動小数点数
浮動小数点数浮動小数点数浮動小数点数整数浮動小数点数

それぞれのメソッドで結果が異なるため注意して下さい。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

print("10 / 3 = ", 10 / 3, "\n")
print("10.4 / 3 = ", 10.4 / 3, "\n")
print("10 / 3.1 = ", 10 / 3.1, "\n")
print("10.4 / 3.1 = ", 10.4 / 3.1, "\n\n")

print("10.div(3) = ", 10.div(3), "\n")
print("10.4.div(3) = ", 10.4.div(3), "\n")
print("10.div(3.1) = ", 10.div(3.1), "\n")
print("10.4.div(3.1) = ", 10.4.div(3.1), "\n\n")

print("10.quo(3) = ", 10.quo(3), "\n")
print("10.4.quo(3) = ", 10.4.quo(3), "\n")
print("10.quo(3.1) = ", 10.quo(3.1), "\n")
print("10.4.quo(3.1) = ", 10.4.quo(3.1), "\n")

実行結果は次のようになります。

商と剰余を取得する

剰余を取得する

剰余を求めるには Integer クラスまたはFloat クラスで用意されている modulo メソッドを使います。

modulo(other)

引数には除算する数値を指定します。結果として剰余を表す数値を取得します。例えば次のようになります。

puts(10.modulo(3))      # 1
puts(8.54.modulo(2.1))  # 0.1399999999999988

この場合は 10 を 3 で割った剰余として 1 、また 8.54 を 2.1 で割った剰余として 0.1399999999999988 を取得します。

modulo メソッドは % メソッドとまったく同じ動作をします。この場合は除算をする数値が正の数の場合は剰余も正の数となり除算をする数値が負の数の場合は剰余も負の数となります。

10を3で割った場合、商が「3」剰余が「1」
10を(-3)で割った場合、商が「-4」剰余が「-2」
(-10)を3で割った場合、商が「-4」剰余が「2」
(-10)を(-3)で割った場合、商が「3」剰余が「-1」

※ 10 を -3 で割った場合、商が -3 で剰余が 1 ではありません。除算をする数値が負の数の場合は剰余が負の数になるように商と剰余が求められます。

また Integer クラスで用意されている remainder メソッドを利用することもできます。

remainder(other)

使い方は modulo と同じですが remainder メソッドの場合は剰余は除算の対象の数値の符号と同じになります。

10を3で割った場合、剰余は「1」
10を(-3)で割った場合、剰余は「1」
(-10)を3で割った場合、剰余は「-1」
(-10)を(-3)で割った場合、剰余は「-1」

remainder メソッドの場合は対応する商を求めるメソッドはありません。少し特殊なメソッドと考えてもいいかと思います。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

print("13 % 4 = ", 13 % 4, "\n")
print("13 % (-4) = ", 13 % (-4), "\n")
print("(-13) % 4 = ", (-13) % 4, "\n")
print("(-13) % (-4) = ", (-13) % (-4), "\n")

print("13.modulo(4) = ", 13.modulo(4), "\n")
print("13.modulo(-4) = ", 13.modulo(-4), "\n")
print("(-13).modulo(4) = ", (-13).modulo(4), "\n")
print("(-13).modulo(-4) = ", (-13).modulo(-4), "\n")

実行結果は次のようになります。

商と剰余を取得する

商と剰余を求める

商と剰余を求めて配列に格納するメソッドも用意されています。 Integer および Float クラスで用意されている divmod メソッドを使います。

divmod(other)

引数には除算する数値を指定します。結果として商と剰余を [商, 剰余] という 2 要素の配列にして取得できます。この場合、商は div メソッドの結果と同じで剰余は modulo メソッドの結果と同じです。

実際の使い方は次のようになります。

p(10.divmod(3))  # [3, 1」

この場合は [3, 1] という配列オブジェクトを取得します。

サンプルコード

では簡単なサンプルで試してみます。

# encoding: UTF-8

print("13.divmod(4) = ")
p(13.divmod(4))

print("19.45.divmod(7.2) = ")
p(19.45.divmod(7.2))

実行結果は次のようになります。

商と剰余を取得する

-- --

Ruby で除算による商と剰余を取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。