Respuestas:
Está haciendo división entera. Puede hacer uno de los números a Floatsumando .0:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
.to_frespuesta es mejor si está dividiendo dos variables que contienen enteros, por ejemplo a.to_f / b. Si literalmente está dividiendo dos enteros codificados (lo que probablemente sea extraño), entonces usar 9.0 / 5está bien.
Está haciendo división entera. Puede usar to_fpara forzar cosas al modo de punto flotante:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
Esto también funciona si sus valores son variables en lugar de literales. Convertir un valor en un flotante es suficiente para obligar a la expresión completa a la aritmética de coma flotante.
También existe el Numeric#fdivmétodo que puede utilizar en su lugar:
9.fdiv(5) #=> 1.8
Puede incluir el mathnmódulo ruby .
require 'mathn'
De esta manera, podrás hacer la división normalmente.
1/2 #=> (1/2)
(1/2) ** 3 #=> (1/8)
1/3*3 #=> 1
Math.sin(1/2) #=> 0.479425538604203
De esta manera, obtienes una división exacta (clase Racional) hasta que decides aplicar una operación que no puede expresarse como racional, por ejemplo Math.sin.
Cambiar el 5a 5.0. Estás obteniendo división entera.
El Fixnum # to_r no se menciona aquí, se introdujo desde ruby 1.9. Convierte Fixnum en forma racional. A continuación se presentan ejemplos de sus usos. Esto también puede dar una división exacta siempre que todos los números utilizados sean 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
Ejemplo donde un flotador operado en un número racional convierte el resultado en flotador.
a = 5.to_r #=> (5/1)
a = a * 5.0 #=> 25.0
def method; a - b/8; enddevolvería el resultado del cálculo del método, ya que la última expresión en una llamada al método es el valor de retorno.