From: tadayoshi funaba Date: 2009-06-18T07:43:41+09:00 Subject: [ruby-core:23906] [Bug #1640] [PATCH] Documentation for the Rational Class Issue #1640 has been updated by tadayoshi funaba. >> div and modulo relate to floor, remainder relate to truncate. > > Do you suggest a "see also" pointer between these methods, or did you want something else? i think many programmer don't understand differences between modulo and remainder. "If _rat_ and _numeric_ have different signs, returns _mod_-_numeric_..." it's so difficult for me. x modulo y = x-y*floor(x/y) x remainder y = x-y*truncate(x/y) x = Rational(13); y = Rational(-4) x-y*(x/y).floor #=> (-3/1) x-y*(x/y).truncate #=> (1/1) x.modulo(y) #=> (-3/1) x.remainder(y) #=> (1/1) and x-y*(x/y).div(1)#=> (-3/1) # modulo >> floor, ceil and truncate can accept an extra argument, not only round. > >Yes, I realised that. I didn't document them because I was waiting for an explanation of how that argument worked. Could you explain it to me? :-) same. floor (-inf), ceil (+inf), truncate (zero) and round (nearest) '%f' % Rational('-1.125').floor(2) #=> "-1.130000" '%f' % Rational('-1.125').ceil(2) #=> "-1.120000" '%f' % Rational('-1.125').truncate(2) #=> "-1.120000" '%f' % Rational('-1.125').round(2) #=> "-1.130000" '%f'% ((Rational('-1.125')*10**2).floor*10**-2) #=> "-1.130000" '%f'% ((Rational('-1.125')*10**2).ceil*10**-2) #=> "-1.120000" '%f'% ((Rational('-1.125')*10**2).truncate*10**-2) #=> "-1.120000" '%f'% ((Rational('-1.125')*10**2).round*10**-2) #=> "-1.130000" also accept negative number. '%f' % Rational('12345.6789').round(2) #=> "12345.680000" '%f' % Rational('12345.6789').round(-2) #=> "12300.000000" see also Float#round. 12345.6789.round(2) #=> 12345.68 12345.6789.round(-2) #=> 12300 >> to_r also, but never raise exception of parser error. > >I don't understand this. Rational() doesn't call #to_r on arguments, and does raise errors for invalid arguments. Could you clarify? it's ruby's style. $ ruby -e 'p Integer("x")' -e:1:in `Integer': invalid value for Integer: "x" (ArgumentError) from -e:1 $ ruby -e 'p Integer(nil)' -e:1:in `Integer': can't convert nil into Integer (TypeError) from -e:1:in `
' $ ruby -e 'p Integer(Integer(Integer("0")))' 0 $ ruby -e 'p "x".to_i' 0 Thanks for your re-edit. ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1640 ---------------------------------------- http://redmine.ruby-lang.org