to_r()
public
Returns the value as a rational.
NOTE: 0.3.to_r isn’t the same as
‘0.3’.to_r. The latter is equivalent to
‘3/10’.to_r, but the former isn’t so.
For example:
2.0.to_r
2.5.to_r
-0.75.to_r
0.0.to_r
static VALUE
float_to_r(VALUE self)
{
VALUE f, n;
float_decode_internal(self, &f, &n);
#if FLT_RADIX == 2
{
long ln = FIX2LONG(n);
if (ln == 0)
return f_to_r(f);
if (ln > 0)
return f_to_r(f_lshift(f, n));
ln = -ln;
return rb_rational_new2(f, f_lshift(ONE, INT2FIX(ln)));
}
#else
return f_to_r(f_mul(f, f_expt(INT2FIX(FLT_RADIX), n)));
#endif
}