2012-02-07 17 views
11

Se ho un float come 3.75, come posso dividerlo nel numero intero 3 e nel galleggiante 0,75?Divisione flottante in numeri interi e decimali in Ruby

Devo convertire il float in una stringa, quindi dividere la stringa con ".", Quindi convertire le parti in numeri interi e float di nuovo oppure esiste un modo più elegante o "giusto" per eseguire questa operazione ?

risposta

13

Come già detto è possibile utilizzare 3.75.to_i per ottenere il numero intero. Un altro modo per ottenere il resto è usare l'operatore % es. 3.75 % 1

+0

Grazie! Grazie a tutti! –

+0

questa è una soluzione saggia :) è stato bello anche per me;) –

16

È possibile utilizzare Numeric#divmod con argomento 1 per questo:

restituisce una matrice contenente il quoziente ed il modulo ottenuto dividendo num da numerico.

a.divmod 1 
=> [3, 0.75] 

Se si desidera ottenere valore preciso, questo metodo è disponibile per BigDecimal così:

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, non avevo familiarità con questo metodo. Grazie per il link. – Gazler

+2

Si noti che questa soluzione differisce dalla soluzione accettata per i numeri negativi. '-3.75.to_i # => -3', e tuttavia' -3.75.divmod 1 # => [-4, 0.25] ' –