Risposte:
Sta facendo una divisione intera. Puoi creare uno dei numeri a Float
aggiungendo .0
:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
.to_f
risposta è migliore se stai dividendo due variabili che contengono numeri interi, ad es a.to_f / b
. Se stai letteralmente dividendo due numeri interi (che probabilmente è strano), allora usare 9.0 / 5
va bene.
Sta facendo una divisione intera. Puoi usare to_f
per forzare le cose in modalità virgola mobile:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
Questo funziona anche se i tuoi valori sono variabili anziché letterali. La conversione di un valore in float è sufficiente per forzare l'intera espressione in aritmetica in virgola mobile.
C'è anche il Numeric#fdiv
metodo che puoi usare invece:
9.fdiv(5) #=> 1.8
Puoi includere il mathn
modulo ruby .
require 'mathn'
In questo modo, sarai in grado di effettuare la divisione normalmente.
1/2 #=> (1/2)
(1/2) ** 3 #=> (1/8)
1/3*3 #=> 1
Math.sin(1/2) #=> 0.479425538604203
In questo modo, si ottiene la divisione esatta (classe Rational) fino a quando non si decide di applicare un'operazione che non può essere espressa come razionale, ad esempio Math.sin
.
Cambia 5
in 5.0
. Stai ottenendo la divisione intera.
Fixnum # to_r non è menzionato qui, è stato introdotto dal ruby 1.9. Converte Fixnum in forma razionale. Di seguito sono riportati alcuni esempi dei suoi usi. Questo può anche dare una divisione esatta fintanto che tutti i numeri utilizzati sono Fixnum.
a = 1.to_r #=> (1/1)
a = 10.to_r #=> (10/1)
a = a / 3 #=> (10/3)
a = a * 3 #=> (10/1)
a.to_f #=> 10.0
Esempio in cui un float operato su un numero razionale copre il risultato in float.
a = 5.to_r #=> (5/1)
a = a * 5.0 #=> 25.0
def method; a - b/8; end
restituirebbe semplicemente il risultato del calcolo dal metodo, poiché l'ultima espressione in una chiamata di metodo è il valore restituito.