Estou tendo problemas para arredondar. Eu tenho um float, que eu quero arredondar para o centésimo de um decimal. No entanto, só posso usar o .round
que basicamente o transforma em int, o que significa que 2.34.round # => 2.
existe uma maneira simples de fazer algo como2.3465 # => 2.35
ruby-on-rails
ruby
rounding
user211662
fonte
fonte
sprintf '%.2f', 2.3465
também funciona.2.3000.round(2) => 2.3
esprintf '%.2f', 2.300 => 2.30
. Na minha opinião, isso é uma falha no round (), ou deveria ter uma opção para preservar os zeros à direita.2.3000.round(2)
é um número, não uma string. Não há como o número2.3
ser diferente2.30
, portanto, não há como ter uma opção para preservar zeros à direita. Você pode criar sua própria classe de numbers_with_significance, mas já temos strings.'%.3f' % 1.2345
(3 casas decimais, não 2), no entanto !! O mesmosprintf
também. Cuidado. Que irá retornar=> 1.234
não=> 1.235
como a maioria seria de esperar (IOW, após a segunda decimal, rodadas sprintf 5 para baixo e só arredonda um 6 para cima). É por isso que o comentário de Kit Ho acima tem mais de 25 votos positivos. Mais seguro de usar,'%.3f' % 1.2345.round(3)
o número é arredondado corretamente.round
primeiro e depois formatado (com zeros à direita, se necessário).Passe um argumento para arredondar contendo o número de casas decimais para arredondar para
fonte
1.1.round(2)
=>1.1
não1.10
você pode usar isso para arredondar para uma precisão.
fonte
Você pode adicionar um método na classe Float, eu aprendi isso no stackoverflow:
fonte
Você também pode fornecer um número negativo como argumento ao
round
método para arredondar para o múltiplo mais próximo de 10, 100 e assim por diante.fonte
fonte
que tal
(2.3465*100).round()/100.0
?fonte
Se você apenas precisar exibi-lo, eu usaria o auxiliar number_with_precision . Se você precisar em outro lugar, eu usaria, como Steve Weet apontou, o
round
métodofonte
number_with_precision
é o método somente Rails.Para o ruby 1.8.7, você pode adicionar o seguinte ao seu código:
fonte