Comment arrondir un flottant à deux décimales dans JRuby(1.6.x) ?
number = 1.1164
number.round(2)
# The above shows the following error
# wrong number of arguments (1 for 0)
Comment arrondir un flottant à deux décimales dans JRuby(1.6.x) ?
number = 1.1164
number.round(2)
# The above shows the following error
# wrong number of arguments (1 for 0)
@BalaKarthik C'est la raison pour laquelle j'utilise la solution de Theo. Elle arrondit correctement (sauf si vous dépassez 3 décimales pour une raison étrange, voir les commentaires), donc c'est la meilleure solution si vous cherchez une sortie de chaîne.
sprintf('%.2f', number)
est un moyen cryptique, mais très puissant, de formater les nombres. Le résultat est toujours une chaîne de caractères, mais puisque vous arrondissez, je suppose que vous le faites de toute façon à des fins de présentation. sprintf
vous pouvez formater n'importe quel numéro comme vous le souhaitez, et bien plus encore.
Documentation complète de sprintf : http://www.ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf
'%.2f' % number
fonctionne également est plus communément observé, du moins dans mon expérience.
@MichaelKohl Le guide de style ruby faveurs sprintf
(ou format
) sur le %
version. Le raisonnement pour cela est discuté aquí il s'agit surtout d'une question de lisibilité. Je ne dis pas que nous devons tous suivre le guide de style, je donne juste quelques raisons :)
Notez qu'après la 3ème décimale, sprintf arrondit sur 6, pas sur 5, par exemple, sprintf("%.3f", 1.2225) sera "1.222", sprintf("%.3f", 1.2226) sera "1.223", si cela a de l'importance pour vous, utilisez #round.
Float#round peut prendre un paramètre dans Ruby 1.9, mais pas dans Ruby 1.8. JRuby utilise par défaut la version 1.8, mais il est capable de fonctionnant en mode 1.9 .
Je sais que Sam ne semble pas avoir l'intention d'arrondir le nombre dans le but de présenter quelque chose comme une monnaie, mais sachez que l'utilisation de #round(precision) ne fonctionnera pas comme prévu si vous essayez de faire cela (3.round(2) #=> 3.0, pas 3.00). Pour cela, consultez la réponse de Theo ci-dessous.
Après avoir reçu des commentaires, il semble que la solution originale n'ait pas fonctionné. C'est pourquoi nous avons 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 arrondir Ces réponses n'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 retournera 5.66
au lieu d'arrondir 5.67
. J'espère que cela aidera quelqu'un
Ça ne marche pas. Pour que cela fonctionne, vous devez prendre en compte n'importe quel chiffre de taille. En utilisant le modèle mis en place ici, vous pouvez : 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 plus simplement, vous pouvez utiliser float_n.to_d.round(2, :truncate).to_f
Merci pour cette remarque. Mais, les méthodes que vous proposez échouent aussi sur les grands nombres !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.