Completar com zeros (Zero padding)

Ao lidar com números, é comum precisar deixá-los com uma quantidade específica de dígitos, completando com zeros à esquerda quando necessário. Por exemplo, deixando todos com cinco dígitos:

De:              Para:
4                00004
27               00027
392              00392
4991             04991

Algumas linguagens contam com o formatador %d, que permite especificar o número de dígitos, neste caso, %05d. Um exemplo rápido em Shell:

$ printf %05d 123
00123

Em linguagens que não possuem este formatador, use a técnica do transbordo: primeiro encha o número com vários zeros à esquerda, depois faça um corte no ponto desejado, pegando somente os N dígitos da direita.

>>> n = "123"
>>> z = "00000" + n
>>> z
'00000123'
>>> z[-5:]
'00123'
>>>
This entry was posted in Misc. Bookmark the permalink.

15 Responses to Completar com zeros (Zero padding)

  1. Eu says:

    Olá! :)

    Aurélio, coloca esse post na categoria Shell também, porque acho que ela seria muito útil lá também… :)

    Agradeço por sua atenção e parabéns pela dica!

  2. Oi Eu :)

    É que apesar dos exemplos em Shell e Python, essa dica serve para todas as linguagens, por isso caiu na categoria Misc. Privilegiar o Shell seria legal, mas injusto ;)

    Valeu

  3. Salve,

    Grande Aurélio…massa o seu livro sobre ER.

    Agora eu quero saber uma coisa.

    Estou tentando fazer uma função em JavaScript que pega o tamanho de determinado campo input do do formulário e vai verificar se ele é igual ao tamanho padrão, caso não seja, completa, à esquerda, com zero.

    Tipo assim:

    valor do campo: 111 (tamanho do campo(tc) = 3 )
    tamanho padrão(tp): 10

    resultado final: 0000000111

    Se poder me ajudar…estou tentando usar um for para concatenar ao conteudo do campo(value) a quantidade tm-tc de zeros ou seja, no exemplo seri 10-3=7 zeros. Mas está dando erro!

    Valeu ai e muito sucesso!

  4. Silas, não use o for! Siga as instruções da dica e use a técnica do transbordo:

    <script>
    var campo = “111”;
    var tc = 10;
    campo = “0000000000” + campo;
    alert(campo.slice(-tc));
    </script>

  5. Roberto says:

    Em Ruby pode ser assim: 4.to_s.rjust(5,’0′)

  6. Em C#:
    string resultado = “1”.PadLeft(5, ‘0’);

  7. Sempre lembrando que Python possui os formatadores “%”:

    >>> print “%05d” % (123)
    00123

  8. Thiago says:

    E para fazer o contrário?
    No caso, tenho uma string “0000123” e quero tirar somente os zeros à esquerda.

    -T

  9. Para tirar zeros à esquerda, pode ser mais fácil ou mais difícil dependendo da linguagem.

    Thiago, uma maneira simples é converter para inteiro e depois converter para string novamente. Por exemplo, em Python:

    >>> str(int(“0001234”))
    ‘1234’

    Ou usar métodos de string, sem conversão de tipos, para tirar os zeros à esquerda, como o lstrip() do Python:
    >>> “0001234”.lstrip(‘0’)
    ‘1234’

    Imagino que outras linguagens como Ruby, Perl e PHP também tenham algo parecido com o lstrip().

  10. Marcio says:

    Em PHP pode ser assim: str_pad($valor, 5, “0”, STR_PAD_LEFT)

  11. antonio urq says:

    thx

  12. Grande dica amigo! Excelente artigo. Foi muito útil!!

    Rodolfo Nogueira
    Curitiba Paraná – UFPR Música

  13. ewerson franco says:

    Em python2.7 e posteriores:
    b = ‘123’
    >>> b.rjust(5,’0′) # inserindo a direita
    ‘00123’
    ou:
    >>> b.ljust(5,’0′) # inserindo a esquerda
    ‘12300’

Leave a Reply

Your email address will not be published. Required fields are marked *