Respuestas:
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 .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
solo regresa 5.6
sprintf('%.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
'%.2f' % number
También funciona más comúnmente visto, al menos en mi experiencia.
sprintf
(o format
) 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"
redondea 5
hacia abajo, en lugar de hacia arriba, ¿hay alguna manera de arreglar eso?
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.
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
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
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
con 5.666666666666666666666666
, regresará en 5.66
lugar de redondeado 5.67
. Espero que ayude a alguien
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 muestra 1.11
y el segundo muestra1.11111111111111e+16
Prueba esto:
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 un decimal, he usado el siguiente 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>
Si desea truncar a 2 decimales, debe usar Integr(a*100)*0.01