class Rational

有理数可以用一对整数表示:a/b (b>0),其中 a 是分子,b 是分母。 数学上,Integer a 等于有理数 a/1。

您可以使用以下方式显式创建 Rational 对象:

您可以使用以下方式将某些对象转换为有理数:

示例

Rational(1)      #=> (1/1)
Rational(2, 3)   #=> (2/3)
Rational(4, -6)  #=> (-2/3) # Reduced.
3.to_r           #=> (3/1)
2/3r             #=> (2/3)

您还可以从浮点数或字符串创建有理数对象。

Rational(0.3)    #=> (5404319552844595/18014398509481984)
Rational('0.3')  #=> (3/10)
Rational('2/3')  #=> (2/3)

0.3.to_r         #=> (5404319552844595/18014398509481984)
'0.3'.to_r       #=> (3/10)
'2/3'.to_r       #=> (2/3)
0.3.rationalize  #=> (3/10)

有理数对象是一个精确的数字,它可以帮助您编写没有任何舍入误差的程序。

10.times.inject(0) {|t| t + 0.1 }              #=> 0.9999999999999999
10.times.inject(0) {|t| t + Rational('0.1') }  #=> (1/1)

但是,当表达式包含不精确的组成部分(数值或运算)时,它将产生不精确的结果。

Rational(10) / 3   #=> (10/3)
Rational(10) / 3.0 #=> 3.3333333333333335

Rational(-8) ** Rational(1, 3)
                   #=> (1.0000000000000002+1.7320508075688772i)