JRuby 1.6.x. Comment arrondissez-vous un flotteur à des décimales dans jruby.
number = 1.1164
number.round(2)
The above shows the following error
wrong number of arguments (1 for 0)
Comment arrondir ceci à 2 décimales?
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 .
la source
(5.6).round(2)
revient seulement 5,6sprintf('%.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
la source
'%.2f' % number
fonctionne aussi est plus couramment vu, du moins dans mon expérience.sprintf
(ouformat
) 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"
arrondit5
vers le bas, plutôt que vers le haut, y a-t-il un moyen de résoudre ce problème?Éditer
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.
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
avec
5.666666666666666666666666
, il reviendra5.66
au lieu d'arrondi5.67
. J'espère que cela aidera quelqu'unla source
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 montre1.11
et le second montre1.11111111111111e+16
Essaye ça:
la source
pour tronquer une décimale, j'ai utilisé le code suivant:
Si vous souhaitez tronquer à 2 décimales, vous devez utiliser
Integr(a*100)*0.01
la source