Por que a divisão em Ruby está retornando um inteiro em vez de um valor decimal?

Por exemplo:

9 / 5 #=> 1 

mas eu esperava 1.8 . Como posso obter o resultado decimal correto (não inteiro)? Por que está retornando 1 em tudo?

Está fazendo uma divisão inteira. Você pode fazer um dos números um Float adicionando .0 :

 9.0 / 5 #=> 1.8 9 / 5.0 #=> 1.8 

Está fazendo uma divisão inteira. Você pode usar to_f para forçar as coisas no modo de ponto flutuante:

 9.to_f / 5 #=> 1.8 9 / 5.to_f #=> 1.8 

Isso também funciona se seus valores forem variables ​​em vez de literais. Converter um valor em float é suficiente para coagir a expressão inteira para aritmética de ponto flutuante.

Existe também o método Numeric#fdiv que você pode usar:

 9.fdiv(5) #=> 1.8 

Você pode verificar isso com irb:

 $ irb >> 2 / 3 => 0 >> 2.to_f / 3 => 0.666666666666667 >> 2 / 3.to_f => 0.666666666666667 

Você pode include o módulo ruby mathn .

 require 'mathn' 

Desta forma, você será capaz de 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 (class Rational) até decidir aplicar uma operação que não pode ser expressa como racional, por exemplo, Math.sin .

Altere o 5 para o 5.0 . Você está começando a divisão inteira.

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 dar uma divisão exata, desde que todos os números usados ​​sejam fixos.

  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 onde um float operado em um número racional cobre o resultado para flutuar.

 a = 5.to_r #=> (5/1) a = a * 5.0 #=> 25.0