Respostas:
Está fazendo divisão inteira. Você pode transformar um dos números a Float
adicionando .0
:
9.0 / 5 #=> 1.8
9 / 5.0 #=> 1.8
.to_f
resposta é melhor se você estiver dividindo duas variáveis que contêm números inteiros, por exemplo a.to_f / b
. Se você está literalmente dividindo dois números inteiros codificados (o que provavelmente é estranho), usar 9.0 / 5
é bom.
Está fazendo divisão inteira. Você pode usar to_f
para forçar as coisas ao modo de ponto flutuante:
9.to_f / 5 #=> 1.8
9 / 5.to_f #=> 1.8
Isso também funciona se seus valores forem variáveis em vez de literais. Converter um valor em um float é suficiente para coagir toda a expressão à aritmética de ponto flutuante.
Há também o Numeric#fdiv
método que você pode usar:
9.fdiv(5) #=> 1.8
Você pode incluir o mathn
módulo ruby .
require 'mathn'
Dessa forma, você poderá fazer a divisão normalmente.
1/2 #=> (1/2)
(1/2) ** 3 #=> (1/8)
1/3*3 #=> 1
Math.sin(1/2) #=> 0.479425538604203
Dessa forma, você obtém a divisão exata (classe Rational) até decidir aplicar uma operação que não pode ser expressa como racional, por exemplo Math.sin
.
Mude 5
para 5.0
. Você está recebendo divisão inteira.
O Fixnum # to_r não é mencionado aqui, foi introduzido desde o ruby 1.9. Converte Fixnum em forma racional. Abaixo estão exemplos de seus usos. Isso também pode fornecer uma divisão exata, desde que todos os números usados sejam 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
Exemplo em que um flutuador operado em um número racional cobre o resultado para flutuar.
a = 5.to_r #=> (5/1)
a = a * 5.0 #=> 25.0
def method; a - b/8; end
retornaria o resultado do cálculo do método, pois a última expressão em uma chamada de método é o valor de retorno.