Tengo problemas para redondear. Tengo un flotador, que quiero redondear a la centésima de un decimal. Sin embargo, solo puedo usar lo .roundque 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.3465También funciona.2.3000.round(2) => 2.3ysprintf '%.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.3sea 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 parasprintftambién. Tener cuidado. Eso va a volver=> 1.234, no=> 1.235como 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.roundprimero, 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.1no1.10puede 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
roundmé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
roundmétodofuente
number_with_precisiones un método exclusivo de Rails.Para ruby 1.8.7 puede agregar lo siguiente a su código:
fuente