ふなばです。 -13 % 4 は 3 になるのに、-13.0 % 4 は 3.0 になりません。divmod も Float と Rational では、違うようです。このあたり、統一できないものでしょ うか。 floor などは、self を返すだけでいいから、Integer や Rational にも定義して、 def divmod(other) return (self / other).floor, self % other end # floor はつねに Integer で返す。 のようにしませんか。 ふなば ただよし