Tengo problemas para redondear. Tengo un flotador, que quiero redondear a la centésima de un decimal. Sin embargo, solo puedo usar lo .round
que básicamente lo convierte en un int, lo que significa que 2.34.round # => 2.
hay una manera simple de hacer algo como2.3465 # => 2.35
ruby-on-rails
ruby
rounding
usuario211662
fuente
fuente
sprintf '%.2f', 2.3465
También funciona.2.3000.round(2) => 2.3
ysprintf '%.2f', 2.300 => 2.30
. En mi opinión, esta es una falla en round (), o debería tener una opción para preservar los ceros finales.2.3000.round(2)
es un número, no una cadena. No hay forma de que el número2.3
sea diferente2.30
, por lo que no hay forma de tener una opción para preservar los ceros finales. Podrías hacer tu propia clase de números_con_significancia pero entonces ya tenemos cadenas.'%.3f' % 1.2345
(3 lugares decimales, no 2), sin embargo !! Lo mismo parasprintf
también. Tener cuidado. Eso va a volver=> 1.234
, no=> 1.235
como la mayoría esperaría (OIA, después de que el segundo decimal, rondas sprintf 5 hacia abajo y sólo un 6 rondas arriba). Es por eso que el comentario anterior de Kit Ho tiene más de 25 votos a favor. Es más seguro de usar,'%.3f' % 1.2345.round(3)
por lo que el número se redondea correctamente.round
primero, luego se formatea (con ceros finales, si es necesario).Pase un argumento a redondear que contenga el número de decimales a redondear
fuente
1.1.round(2)
=>1.1
no1.10
puede usar esto para redondear a una precisión.
fuente
Puede agregar un método en Float Class, lo aprendí de stackoverflow:
fuente
También puede proporcionar un número negativo como argumento del
round
método para redondear al múltiplo más cercano de 10, 100 y así sucesivamente.fuente
fuente
¿qué pasa
(2.3465*100).round()/100.0
?fuente
Si solo necesita mostrarlo, usaría el ayudante number_with_precision . Si lo necesita en otro lugar, usaría, como señaló Steve Weet, el
round
métodofuente
number_with_precision
es un método exclusivo de Rails.Para ruby 1.8.7 puede agregar lo siguiente a su código:
fuente