Por ejemplo:
9 / 5 #=> 1
pero esperaba 1.8
. ¿Cómo puedo obtener el resultado decimal (no entero) correcto? ¿Por qué está volviendo 1
en absoluto?
Por ejemplo:
9 / 5 #=> 1
pero esperaba 1.8
. ¿Cómo puedo obtener el resultado decimal (no entero) correcto? ¿Por qué está volviendo 1
en absoluto?
def method; a - b/8; end
devolverí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
Float
sumando.0
:fuente
.to_f
respuesta 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 / 5
está bien.Está haciendo división entera. Puede usar
to_f
para 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#fdiv
método que puede utilizar en su lugar:fuente
Puedes consultarlo con irb:
fuente
Puede incluir el
mathn
mó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
5
a5.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