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?

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).


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.


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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.