- Home ›
- Ruby入門 ›
- 数値(Numeric)クラス
除算による商と剰余を取得する
数値に対する四則演算の中で商については「/」で剰余については「%」で取得することができますが、メソッドを使って取得することもできます。ここでは 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つのメソッドの違いは次の通りとなります。
除算の対象 | 除算する数値 | / | div | quo |
---|---|---|---|---|
整数 | 整数 | 整数 | 整数 | 浮動小数点数 |
整数 | 浮動小数点数 | 浮動小数点数 | 整数 | 浮動小数点数 |
浮動小数点数 | 整数 | 浮動小数点数 | 整数 | 浮動小数点数 |
浮動小数点数 | 浮動小数点数 | 浮動小数点数 | 整数 | 浮動小数点数 |
それぞれのメソッドで結果が異なるため注意して下さい。
では簡単なサンプルで試してみます。
# 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 )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。