2012-02-07 26 views
11

Si tengo un flotador como 3.75, ¿cómo puedo dividirlo en el número entero 3 y el flotante 0.75?dividir el flotante en números enteros y decimales en Ruby

¿Tengo que convertir el flotador en una cadena, y luego dividir la cadena por ".", Y luego convertir las partes en enteros y flotadores de nuevo, o hay una manera más elegante o "correcta" para hacer esto ?

Respuesta

13

Como se ha mencionado se puede utilizar 3.75.to_i para obtener el número entero. Una forma alternativa de obtener el resto es utilizando el operador %, por ejemplo. 3.75 % 1

+0

¡Gracias! ¡Gracias a todos! –

+0

esa es una sabia solución :) también fue bueno para mí;) –

16

Puede utilizar Numeric#divmod con el argumento 1 para esto:

Devuelve una matriz que contiene el cociente y el módulo obtenido dividiendo num por numérico.

a.divmod 1 
=> [3, 0.75] 

Si desea obtener valor preciso, este método está disponible para BigDecimal así:

3.456.divmod 1 
=> [3, 0.45599999999999996] 

require 'bigdecimal' 
div_mod = BigDecimal("3.456").divmod 1 
[div_mod[0].to_i, div_mod[1].to_f] 
=> [3, 0.456] 
+0

+1, no estaba familiarizado con este método. Gracias por el enlace. – Gazler

+2

Tenga en cuenta que esta solución difiere de la solución aceptada para números negativos. '-3.75.to_i # => -3', y aún' -3.75.divmod 1 # => [-4, 0.25] ' –

Cuestiones relacionadas