小西 弘将です。

>> -  printf "Age in days: [%d]\n\n", p
>> +  printf "Age in days: [%d]\n\n", p.to_i
>
>これに関連して質問です。
>
>'%f' % (1.to_r/2) や '%s' % (1.to_r/2) は構わなくて、
>'%d' % (1.to_r/2) はダメというのは、なにか理由があるのでしょうか?
書いてたときは素直にsprintfに引数渡ししてんのかなぁと思っていましたが、
BIGNUMとかも出るじゃん。

%dで整数にできるものは、できるようにがんばっているはずだよな? と手繰る
と、object.cで

rb_to_int(val)
    VALUE val;
{
    return rb_to_integer(val, "to_int");
}
と、整数に変換できるかどうかは、to_intを持っていて、Integerを返すものに
限るみたい。
でも、普通はto_iでは?

とりあえず。
class Rational
  def to_int
    to_i
  end
end
とすれば

printf "%d", 1.to_r/2 #=> 0

になるのですが。どっちに手を加えるのが良いのでしょう?

#〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
# 小西 弘将 ( KONISHI Hiromasa )
# konishih / fd6.so-net.ne.jp
#〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜