Respostas:
Float # round pode usar um parâmetro no Ruby 1.9, não no Ruby 1.8. O JRuby assume como padrão 1,8, mas é capaz de executar no modo 1.9 .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
está retornando apenas 5,6
sprintf('%.2f', number)
é uma maneira enigmática, mas muito poderosa, de formatar números. O resultado é sempre uma string, mas como você está arredondando, presumo que você esteja fazendo isso para fins de apresentação de qualquer maneira. sprintf
pode formatar qualquer número da maneira que você quiser e muito mais.
Documentação completa do sprintf: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
também funciona é mais comumente visto, pelo menos na minha experiência.
sprintf
(ou format
) a %
versão. Alguns argumentos para isso são discutidos aqui , principalmente sobre legibilidade. Não que todos nós temos de seguir o guia de estilo, apenas dando algumas razões :)
0.566666666666666
arredonda para0.57
"%.2f"
Arredonda para 5
baixo, em vez de para cima, existe alguma maneira de corrigir isso?
Depois de receber feedback, parece que a solução original não funcionou. Por isso, atualizou a resposta como uma das sugestões.
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
Outras respostas podem funcionar, se você quiser ter números arredondados de 2 casas decimais. Mas, se você quiser ter números de ponto flutuante com as duas primeiras casas decimais sem arredondamento , essas respostas não ajudarão.
Portanto, para obter um número de ponto flutuante com as duas primeiras casas decimais, usei essa técnica. Não funciona em alguns casos
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
com 5.666666666666666666666666
, ele retornará em 5.66
vez de arredondado 5.67
. Espero que ajude alguém
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
Ou muito mais simples que você pode usarfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
como entrada, primeiro mostra 1.11
e segundo mostra1.11111111111111e+16
Tente o seguinte:
module Util
module MyUtil
def self.redondear_up(suma,cantidad, decimales=0)
unless suma.present?
return nil
end
if suma>0
resultado= (suma.to_f/cantidad)
return resultado.round(decimales)
end
return nil
end
end
end
para truncar um decimal, usei o seguinte código:
<th><%#= sprintf("%0.01f",prom/total) %><!--1dec,aprox-->
<% if prom == 0 or total == 0 %>
N.E.
<% else %>
<%= Integer((prom/total).to_d*10)*0.1 %><!--1decimal,truncado-->
<% end %>
<%#= prom/total %>
</th>
Se você deseja truncar até 2 casas decimais, use Integr(a*100)*0.01