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

110

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 d'instructions if-else (si le nombre est inférieur à 10, alors faire un gsub) mais je suppose que c'est un codage 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 des chiffres uniques en deux chiffres?

sjsc
la source

Réponses:

142

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 formatsprintf dans le futur, mais pour cet exemple particulier, cela '%02d'signifie imprimer un entier ( d) prenant au moins 2 caractères ( 2) et un remplissage à gauche avec des zéros au lieu d'espaces ( 0).

Mark Rushakoff
la source
Merci Mark !! Parfait =) Merci!
sjsc
Vous devriez probablement utiliser %02ipour ce cas car il est plus évident que la sortie est et est censée être un entier, d est moins intuitif pour les personnes qui ne sont pas aussi habituées à utiliser sprintf.
SeanJA
vous pouvez simplement '%02d'%1sans sprintf
Qiushi Huang
194

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

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

Cela rendra le "4"droit justifié en veillant à ce qu'il soit au moins 2long de caractères et en le remplissant '0'. ljustfait le contraire.

Ryan Bigg
la source
2
Ce n'est mieux que sprintf si vous souhaitez autoriser les chaînes. Sinon, j'utiliserais sprintf, car il lève une exception (comme il se doit) si j'utilise accidentellement une chaîne.
Velizar Hristov
Si vous savez que vous commencez avec une représentation sous forme de chaîne d'un nombre, j'aime mieux cela que sprintf pour les performances. L'utilisation rjustévite le coût de l'analyse de la chaîne de format de sprintf, de la conversion d'une chaîne en nombre et de la reconversion de ce nombre en chaîne. De plus, il est (sans doute) facile pour un humain de comprendre ce que le code essaie de faire en un coup d'œil.
David Hempy