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.