2012-01-31 24 views
34

Sto cercando di ottenere il resto di una divisione usando Ruby.Come trovare il resto di una divisione in Ruby?

Diciamo che stiamo cercando di dividere 208 per 11.

La finale dovrebbe essere "18 con un resto di 10" ... quello che in definitiva serve è che 10.

Ecco quello che ho ottenuto finora, ma soffoca in questo caso d'uso (dicendo che il resto è 0).

division = 208.to_f/11 
rounded = (division*10).ceil/10.0 
remainder = rounded.round(1).to_s.last.to_i 

risposta

64

L'operatore modulo:

> 208 % 11 
=> 10 
+2

Come l'HECK l'ho reso così complicato? Grazie. – Shpigford

+9

Non voglio fare il nitpick, ma non è un operatore, ma un metodo della classe 'Fixnum':' >> 208.% (11) # => 10' –

+12

@MichaelKohl Tecnicamente tutti gli "operatori" ruby ​​sono metodi . Ad esempio, '5 + 5' è in realtà solo una scorciatoia per' 5. + (5) '. – fbonetti

37

Se è necessario solo la parte intera, utilizzare interi con il / dell'operatore, o il metodo Numeric#div:

quotient = 208/11 
#=> 18 

quotient = 208.0.div 11 
#=> 18 

Se è necessario solo il per il resto, utilizzare l'operatore % o il metodo Numeric#modulo:

modulus = 208 % 11 
#=> 10 

modulus = 208.0.modulo 11 
#=> 10.0 

Se sono necessari entrambi, utilizzare il metodo Numeric#divmod. Questo funziona anche se sia il ricevitore o argomento è un galleggiante:

quotient, modulus = 208.divmod(11) 
#=> [18, 10] 

208.0.divmod(11) 
#=> [18, 10.0] 

208.divmod(11.0) 
#=> [18, 10.0] 

Anche di interesse è il metodo Numeric#remainder. Le differenze tra tutte queste possono essere viste nello documentation for divmod.

+6

+ 1 'divmod' è come andrei. –

Problemi correlati