Integer < Rational < Float の順に強いです。つまり other が Float なら、 self を Float に変換してから演算子を適用します。other が Integer なら other を Rational に変換してから演算子を適用します。冪乗は例外です。
numerator
分子を Fixnum として返します。
denominator
分母を Fixnum として返します。
self + other
和を計算します。
Rational(3, 4) + 2 # => Rational(11, 4) Rational(3, 4) + Rational(2, 1) # => Rational(11, 4) Rational(3, 4) + 2.0 # => 2.75
self - other
差を計算します。
self * other
積を計算します。
self / other
商を計算します。 other が 0 の時は、例外 ZeroDivisionError を投げます。
Rational(3, 4) / 2 # => Rational(3, 8) Rational(3, 4) / Rational(2, 1) # => Rational(3, 8) Rational(3, 4) / 2.0 # => 0.375
self % other
剰余を計算します。絶対値が self の絶対値を越えない、符合が self と同じ Numeric を返します。
Rational(3, 4) % 2 # => Rational(3, 4) Rational(3, 4) % Rational(2, 1) # => Rational(3, 4) Rational(3, 4) % 2.0 # => 0.75
self ** other
冪を計算します。
Rational(3, 4) ** 2 # => Rational(9, 16) Rational(3, 4) ** Rational(2, 1) # => 0.5625 Rational(3, 4) ** 2.0 # => 0.5625
divmod(other)
self を other で割った、商と余りの配列を返します。 商は Fixnum、余りは絶対値が other の絶対値を越えず、符合が other と同じ Numeric です。Numeric#divmod も参照して下さい。
Rational(3,4).divmod(Rational(2,3)) # => [1, Rational(1, 12)] Rational(-3,4).divmod(Rational(2,3)) # => [-2, Rational(7, 12)] Rational(3,4).divmod(Rational(-2,3)) # => [-2, Rational(-7, 12)] Rational(9,4).divmod(2) # => [1, Rational(1, 4)] Rational(9,4).divmod(Rational(2, 1)) # => [1, Rational(1, 4)] Rational(9,4).divmod(2.0) # => [1, 0.25]
abs
self が正なら self、負なら -1 * self を返します。
self <=> other
other と比べて self が大きいなら 1、同じなら 0、小さいなら -1 を返します。
to_i
Fixnum に変換します。
to_f
Float に変換します。
to_s
文字列に変換します。
Rational(-3,4).to_s # => "-3/4"