Por ejemplo:
9 / 5 #=> 1
pero esperaba 1.8. ¿Cómo puedo obtener el resultado decimal (no entero) correcto? ¿Por qué está volviendo 1en absoluto?
Por ejemplo:
9 / 5 #=> 1
pero esperaba 1.8. ¿Cómo puedo obtener el resultado decimal (no entero) correcto? ¿Por qué está volviendo 1en absoluto?
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.Respuestas:
Está haciendo división entera. Puede hacer uno de los números a
Floatsumando.0:fuente
.to_frespuesta es mejor si está dividiendo dos variables que contienen enteros, por ejemploa.to_f / b. Si literalmente está dividiendo dos enteros codificados (lo que probablemente sea extraño), entonces usar9.0 / 5está bien.Está haciendo división entera. Puede usar
to_fpara forzar cosas al modo de punto flotante: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.
fuente
También existe el
Numeric#fdivmétodo que puede utilizar en su lugar:fuente
Puedes consultarlo con irb:
fuente
Puede incluir el
mathnmódulo ruby .De esta manera, podrás hacer la división normalmente.
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.fuente
Cambiar el
5a5.0. Estás obteniendo división entera.fuente
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.
Ejemplo donde un flotador operado en un número racional convierte el resultado en flotador.
fuente