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.

14 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

Leave a Reply

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

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>