Réponses:
Float # round peut prendre un paramètre dans Ruby 1.9, pas dans Ruby 1.8. JRuby est par défaut 1,8, mais il est capable de fonctionner en mode 1.9 .
(5.65235534).round(2)
#=> 5.65
(5.6).round(2)
revient seulement 5,6
sprintf('%.2f', number)
est un moyen cryptique mais très puissant de formater des nombres. Le résultat est toujours une chaîne, mais puisque vous arrondissez, je suppose que vous le faites de toute façon à des fins de présentation. sprintf
peut formater n'importe quel nombre presque comme vous le souhaitez, et bien plus encore.
Documentation complète du sprintf: http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
fonctionne aussi est plus couramment vu, du moins dans mon expérience.
sprintf
(ou format
) la %
version. Un raisonnement à cela est discuté ici , il s'agit principalement de lisibilité. Non pas que nous devions tous suivre le guide de style, en donnant juste quelques raisons :)
0.566666666666666
arrondit à0.57
"%.2f"
arrondit 5
vers le bas, plutôt que vers le haut, y a-t-il un moyen de résoudre ce problème?
Après avoir reçu des commentaires, il semble que la solution originale n'a pas fonctionné. C'est pourquoi a mis à jour la réponse comme l'une des suggestions.
def float_of_2_decimal(float_n)
float_n.to_d.round(2, :truncate).to_f
end
D'autres réponses peuvent fonctionner, si vous voulez avoir des nombres arrondis de 2 décimales. Mais, si vous voulez avoir des nombres à virgule flottante avec les deux premières décimales sans arrondi , ces réponses ne vous aideront pas.
Donc, pour obtenir un nombre à virgule flottante avec les deux premières décimales, j'ai utilisé cette technique. Ne fonctionne pas dans certains cas
def float_of_2_decimal(float_n)
float_n.round(3).to_s[0..3].to_f
end
avec 5.666666666666666666666666
, il reviendra 5.66
au lieu d'arrondi 5.67
. J'espère que cela aidera quelqu'un
def float_of_2_decimal(float_n) num = float_n.to_s.split('.') num[1] = num[1][0..1] num.join(".").to_f end
Ou bien plus simple, vous pouvez utiliserfloat_n.to_d.round(2, :truncate).to_f
11111111111111111.222222222222222
comme entrée, le premier montre 1.11
et le second montre1.11111111111111e+16
Essaye ça:
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
pour tronquer une décimale, j'ai utilisé le code suivant:
<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 vous souhaitez tronquer à 2 décimales, vous devez utiliser Integr(a*100)*0.01