Como posso imprimir um número ou fazer uma string com preenchimento zero para torná-lo de largura fixa?
Por exemplo, se eu tiver o número 12
e quiser fazê-lo 000012
.
O pacote fmt pode fazer isso por você:
fmt.Printf("|%06d|%6d|\n", 12, 345)
Observe o 0 em% 06d, que o tornará uma largura de 6 e o preencherá com zeros. O segundo será preenchido com espaços.
Você pode vê-lo em ação aqui: http://play.golang.org/p/cinDspMccp
-
só dá espaços, preciso de zeros.Sprintf
vez dePrintf
Use a
Printf
função do pacote fmt com umwidth
de6
e o caractere de preenchimento0
:Configurando as
width
obras colocando um inteiro precedendo diretamente o especificador de formato ('verbo'):Os únicos caracteres de preenchimento suportados pelo Golang (e a maioria dos outros idiomas) são espaços e
0
:É possível justificar à direita a impressão adicionando um menos
-
:Esteja ciente de que, para números de ponto flutuante, a largura inclui toda a string de formato:
É útil observar que a largura também pode ser definida de maneira programática usando em
*
vez de um número e passando a largura como umint
parâmetro:Isso pode ser útil, por exemplo, se o maior valor que você deseja imprimir só for conhecido no tempo de execução (chamado
maxVal
no exemplo a seguir):Por último, se você não quiser imprimir,
stdout
mas retornar uma String, useSprintf
também from fmt package com os mesmos parâmetros:fonte
Existe uma maneira mais simples de conseguir isso. Usar
fmt.Sprintf
formata e retorna uma string sem imprimi-la em qualquer lugar. Aqui%02d
diz o pad zero à esquerda para o valor que tem <2 números de dígitos. Se o valor fornecido tiver 2 ou mais dígitos, ele não será preenchido. Por exemplo:Você pode usar
%03d
ou mais para mais preenchimento de zeros.fonte
A pergunta " Lista de formatos de impressão em Go lang " nos lembra que também existe a bandeira:
Você pode ver mais exemplos de preenchimento com
DaddyOh/golang-samples/pad.go
, se desejar preencher com outras sequências de strings (mais complexo do que '0
' ou ''):
leftPad(s string, padStr string, pLen int)
rightPad(s string, padStr string, pLen int)
leftPad2Len(s string, padStr string, overallLen int)
rightPad2Len(s string, padStr string, overallLen int)
Veja play.golang.org:
fonte
lpad ("3", "0", 2) resultado: "03"
lpad ("12", "0", 6) resultado: "000012"
fonte