2012-01-31 56 views
34

Estoy tratando de obtener el resto de una división usando Ruby.¿Cómo encontrar el resto de una división en Ruby?

Digamos que estamos tratando de dividir 208 por 11.

El final debe ser "18 con un resto de 10" ... lo que en última instancia es que necesito 10.

Esto es lo que tengo hasta ahora, pero se atasca en este caso de uso (diciendo que el resto es 0).

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

Respuesta

64

El operador módulo:

> 208 % 11 
=> 10 
+2

¿Cómo lo hice el HECK lo hago tan complicado? Gracias. – Shpigford

+9

No quiero criticar, pero no es un operador, sino un método de la clase 'Fixnum':' >> 208.% (11) # => 10' –

+12

@MichaelKohl Técnicamente todos los "operadores" de ruby ​​son métodos . Por ejemplo, '5 + 5' es realmente solo una abreviatura de' 5. + (5) '. – fbonetti

37

Si necesita sólo la parte entera, el uso de números enteros con el operador /, o la Numeric#div método:

quotient = 208/11 
#=> 18 

quotient = 208.0.div 11 
#=> 18 

Si necesita sólo el resto, use el operador % o el método Numeric#modulo:

modulus = 208 % 11 
#=> 10 

modulus = 208.0.modulo 11 
#=> 10.0 

Si necesita ambas, use el método Numeric#divmod. Esto funciona incluso si el receptor o argumento es un flotador:

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

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

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

También de interés es el método Numeric#remainder. Las diferencias entre todos estos se pueden ver en el documentation for divmod.

+6

+ 1 'divmod' es como iría. –

Cuestiones relacionadas