web-dev-qa-db-fra.com

Comment arrondir un flottant à deux décimales près de jruby

JRuby 1.6.x. Comment arrondissez-vous un nombre décimal en jruby?.

number = 1.1164
number.round(2)

The above shows the following error
wrong number of arguments (1 for 0)

Comment puis-je arrondir cela à 2 décimales?

157
Sam

Float # round peut prendre un paramètre dans Ruby 1.9, pas dans Ruby 1.8. JRuby par défaut à 1.8, mais il est capable de fonctionnant en mode 1.9 .

85
steenslag
(5.65235534).round(2)
#=> 5.65
266
boulder_ruby

sprintf('%.2f', number) est un moyen crypté, 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 pour les besoins de la présentation. sprintf peut formater n’importe quel nombre, et beaucoup plus.

Documentation complète sur sprintf: http://www.Ruby-doc.org/core-2.0.0/Kernel.html#method-i-sprintf

180
Theo

Modifier

Après avoir reçu des commentaires, il semble que la solution initiale n'a pas fonctionné. C'est pourquoi a mis à jour la réponse parmi les 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 souhaitez avoir des nombres arrondis à 2 décimales. Mais, si vous voulez avoir des nombres à virgule flottante avec les deux premières décimales sans arrondir, 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 retournera 5.66 au lieu de arrondi 5.67. J'espère que ça va aider quelqu'un

1
Anwar