Por exemplo:
9 / 5 #=> 1
mas eu esperava 1.8
. Como posso obter o resultado decimal (não inteiro) correto? Por que está voltando 1
?
Por exemplo:
9 / 5 #=> 1
mas eu esperava 1.8
. Como posso obter o resultado decimal (não inteiro) correto? Por que está voltando 1
?
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.Respostas:
Está fazendo divisão inteira. Você pode transformar um dos números a
Float
adicionando.0
:fonte
.to_f
resposta é melhor se você estiver dividindo duas variáveis que contêm números inteiros, por exemploa.to_f / b
. Se você está literalmente dividindo dois números inteiros codificados (o que provavelmente é estranho), usar9.0 / 5
é bom.Está fazendo divisão inteira. Você pode usar
to_f
para forçar as coisas ao modo de ponto flutuante: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.
fonte
Há também o
Numeric#fdiv
método que você pode usar:fonte
Você pode verificá-lo com o irb:
fonte
Você pode incluir o
mathn
módulo ruby .Dessa forma, você poderá fazer a divisão normalmente.
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
.fonte
Mude
5
para5.0
. Você está recebendo divisão inteira.fonte
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.
Exemplo em que um flutuador operado em um número racional cobre o resultado para flutuar.
fonte