Ruby on Rails: Como você adiciona zeros na frente de um número se ele for menor que 10?


110

Estou tentando converter números de um único dígito em números de dois dígitos assim:

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

Eu acho que poderia colocar um monte de instruções if-else (se o número for menor que 10, então faça um gsub), mas acho que é uma codificação horrível. Eu sei que Rails tem number_with_precision, mas vejo que só se aplica a números decimais. Alguma ideia sobre como converter um dígito em dois dígitos?

Respostas:


142

Você quis dizer sprintf '%02d', n?

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

Você pode querer fazer referência à tabela de formatossprintf no futuro, mas para este exemplo particular '%02d'significa imprimir um inteiro ( d) ocupando pelo menos 2 caracteres ( 2) e preenchendo à esquerda com zeros em vez de espaços ( 0).


Obrigado Mark !! Perfeito =) Obrigado!
sjsc

Você provavelmente deve usar %02ipara este caso, pois é mais óbvio que a saída é e deve ser um número inteiro, d é menos intuitivo para pessoas que não estão tão acostumadas a usar sprintf.
SeanJA

você pode simplesmente '%02d'%1sem sprintf
Qiushi Huang

194

Muitas pessoas estão usando sprintf(que é a coisa certa a se fazer), e eu acho que se você quiser fazer isso com uma string , é melhor ter em mente os métodos rjuste ljust:

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

Isso tornará o "4"direito justificado, garantindo que tenha pelo menos 2caracteres de comprimento e o preencherá com '0'. ljustfaz o oposto.


2
Isso só é melhor do que sprintf se você quiser permitir strings. Caso contrário, eu usaria sprintf, uma vez que ele lança uma exceção (como deveria) se eu acidentalmente usar uma string.
Velizar Hristov

Se você sabe que está começando com uma representação de string de um número, gosto mais disso do que do sprintf para desempenho. O uso rjustevita o custo de analisar a string de formato de sprintf, convertendo uma string em um número e convertendo esse número de volta em uma string. Além disso, é (indiscutivelmente) fácil para um ser humano entender o que o código está tentando fazer à primeira vista.
David Hempy


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.