web-dev-qa-db-fra.com

Ruby on Rails: Comment ajouter des zéros devant un nombre s'il est inférieur à 10?

Je cherche à convertir des nombres à un chiffre en nombres à deux chiffres comme ceci:

9 ==> 09
5 ==> 05
12 == 12
4 ==> 04

Je pense que je pourrais mettre un tas de déclarations if-else (si le nombre est inférieur à 10, alors faire un gsub), mais je pense que c'est un code horrible. Je sais que Rails a number_with_precision mais je vois que cela ne s'applique qu'aux nombres décimaux. Des idées sur la façon de convertir un chiffre à deux chiffres?

100
sjsc

Voulez-vous dire sprintf '%02d', n?

irb(main):003:0> sprintf '%02d', 1
=> "01"
irb(main):004:0> sprintf '%02d', 10
=> "10"

Vous voudrez peut-être faire référence à la table de format pour sprintf à l'avenir, mais pour cet exemple particulier, '%02d' signifie imprimer un entier (d) prenant au moins 2 caractères (2) et un remplissage à gauche avec zéros au lieu d'espaces (0).

133
Mark Rushakoff

Beaucoup de gens utilisent sprintf (ce qui est la bonne chose à faire), et je pense que si vous voulez le faire pour une chaîne il vaut mieux garder à l'esprit les méthodes rjust et ljust:

"4".rjust(2, '0')

Ceci fera en sorte que le "4" soit justifié à droite en vérifiant qu’il a au moins 2 caractères et qu’il est complété par '0'. ljust fait le contraire.

179
Ryan Bigg
36
ax.

Essayez ceci, ça devrait marcher:

abc= 5
puts "%.2i" %abc   >> 05


abc= 5.0
puts "%.2f" %abc   >> 5.00
8
Salil

Rails 5.2.2

Comme décrit ici: https://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html , vous pouvez utiliser la méthode de bibliothèque suivante:

number_with_precision(123, precision: 2) // 123.00
0
dimpiax