JRuby 1.6.x. ¿Cómo redondeas un flotador a lugares decimales en jruby?
number = 1.1164
number.round(2)
The above shows the following error
wrong number of arguments (1 for 0)
¿Cómo redondeo esto a 2 decimales?
Float # round puede tomar un parámetro en Ruby 1.9, no en Ruby 1.8. El valor predeterminado de JRuby es 1.8, pero es capaz de ejecutarse en modo 1.9 .
fuente
(5.6).round(2)
solo regresa 5.6sprintf('%.2f', number)
Es una forma críptica pero muy poderosa de formatear números. El resultado siempre es una cadena, pero dado que está redondeando, supongo que lo está haciendo para fines de presentación de todos modos.sprintf
puede formatear cualquier número de la forma que desee y mucho más.Documentación completa de sprintf: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
fuente
'%.2f' % number
También funciona más comúnmente visto, al menos en mi experiencia.sprintf
(oformat
) sobre la%
versión. Aquí se discute algún razonamiento para eso , se trata principalmente de legibilidad. No es que todos tengamos que seguir la guía de estilo, solo dando algunas razones :)0.566666666666666
redondea a0.57
"%.2f"
redondea5
hacia abajo, en lugar de hacia arriba, ¿hay alguna manera de arreglar eso?Editar
Después de recibir comentarios, parece que la solución original no funcionó. Es por eso que actualizó la respuesta como una de las sugerencias.
Otras respuestas pueden funcionar, si desea tener números redondeados de 2 decimales. Pero, si desea tener números de coma flotante con los dos primeros lugares decimales sin redondear , esas respuestas no ayudarán.
Entonces, para obtener un número de coma flotante con los dos primeros lugares decimales, utilicé esta técnica. No funciona en algunos casos
con
5.666666666666666666666666
, regresará en5.66
lugar de redondeado5.67
. Espero que ayude a alguienfuente
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
O mucho más simple que puedes usarfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
entrada, el primero muestra1.11
y el segundo muestra1.11111111111111e+16
Prueba esto:
fuente
para truncar un decimal, he usado el siguiente código:
Si desea truncar a 2 decimales, debe usar
Integr(a*100)*0.01
fuente