Rational(x, y = 1) -> Rational
[permalink][rdoc]引数を有理数(Rational)に変換した結果を返します。
引数 x、y の両方を指定した場合、x/y した Rational オブジェクトを返します。
Rational("1/3") # => (1/3) Rational(1, 3) # => (1/3) Rational("0.1", "0.3") # => (1/3) Rational(Complex(1,2), 2) # => ((1/2)+(1/1)*i)
ただし、1.8系とは異なり、Rational オブジェクトは常に既約(それ以上約分できない状態)である事に注意してください。
Rational(2, 6) # => (1/3) Rational(1, 3) * 3 # => (1/1)
引数に文字列を指定する場合、以下のいずれかの形式で指定します。
"1.2/3" のように、分子を実数にする事も可能ですが、分母には指定できません。また、Kernel.#Integer とは違い "0x10" のような進数を表す接頭辞を含めた指定は行えません。
例:
Rational("1/3") # => (1/3) Rational("0.3") # => (3/10) Rational('0.3E0') # => (3/10) Rational('0.1E1/3') # => (1/3) Rational('1.2/3') # => (2/5) Rational('1/3.1') # => ArgumentError Rational('3.0', '3.0') # => (1/1) Rational('3/3', '3/3') # => (1/1) Rational('1_234_567') # => (1234567/1) Rational(" \n10\t ") # => (10/1) # 空白類は無視される Rational("0x10") # => ArgumentError
引数に変換できないオブジェクトを指定した場合には ArgumentError が発生します。
Rational(Object.new) # => ArgumentError Rational("") # => ArgumentError Rational(nil) # => ArgumentError
また、Rational('0.3') と Rational(0.3) は異なるオブジェクトを返す事に注意してください。前者は正確に 3/10 ですが、後者はそうではありません。
Rational('0.3') # => (3/10) Rational(0.3) # => (5404319552844595/18014398509481984)
[SEE_ALSO] Rational