Comment puis-je imprimer un nombre ou créer une chaîne avec zéro remplissage pour le rendre largeur fixe?
Par exemple, si j'ai le numéro 12
et que je veux le rendre 000012
.
Le paquetage fmt peut le faire pour vous:
fmt.Printf("|%06d|%6d|\n", 12, 345)
Remarquez le 0 dans% 06d, ce qui lui donnera une largeur de 6 et le complétera avec des zéros. Le second remplira d'espaces.
Vous pouvez le voir en action ici: http://play.golang.org/p/cinDspMccp
Il existe un moyen simple d'y parvenir. Utilisation
func padNumberWithZero(value uint32) string {
return fmt.Sprintf("%02d", value)
}
fmt.Sprintf
formate et retourne une chaîne sans l’imprimer nulle part ..__ Ici %02d
indique le zéro du pavé gauche pour la valeur qui a <2 nombre de chiffres. Si la valeur donnée a 2 chiffres ou plus, elle ne sera pas saturée. Par exemple:
Vous pouvez utiliser %03d
ou plus pour plus de remplissage de zéros.
Utilisez la fonction Printf
du paquet fmt avec une width
de 6
et le caractère de remplissage 0
:
import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'
Le réglage de la largeur fonctionne comme suit:
fmt.Printf("%d", 12) // Uses default width, prints '12'
fmt.Printf("%6d", 12) // Uses a width of 6 and left pads with spaces, prints ' 12'
fmt.Printf("%06d", 12) // Uses 0 as the padding character, prints '000012'
Printf
dans Golang et la plupart des autres langues ne prend en charge que les espaces et 0
en tant que caractères de remplissage:
fmt.Printf("%6d", 12) // Default padding is spaces, prints ' 12'
fmt.Printf("%06d", 12) // Change to 0 padding, prints '000012'
Il est possible de justifier correctement l’impression en ajoutant un -
moins:
fmt.Printf("%-6d", 12) // Padding right-justified, prints '12 '
Attention, pour les nombres à virgule flottante, la largeur inclut toute la chaîne de format:
fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)
Il est utile de noter que la largeur peut également être définie par programme en utilisant *
au lieu d'un nombre et en transmettant la largeur en tant que paramètre int
:
myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before
Par exemple, si cela peut être utile, considérez si vous connaissez la plus grande valeur que vous souhaitez imprimer maxVal
:
myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)
Enfin, si vous ne souhaitez pas imprimer sur stdout
mais récupérer une chaîne, utilisez Sprintf
:
s := fmt.Sprintf("%06d", 12) // returns '000012' as a String
La question " Liste du format d'impression en Go lang " nous rappelle qu'il y a aussi le drapeau:
-
pad avec des espaces à droite plutôt qu'à gauche (justifier à gauche le champ)
Vous pouvez voir plus d'exemples de remplissage avec DaddyOh/golang-samples/pad.go
, si vous souhaitez utiliser d'autres séquences de chaîne (plus complexes 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)
Voir play.golang.org :
1234567890
leftPad(str, "*", 3) ***1234567890
leftPad2Len(str, "*-", 13) -*-1234567890
leftPad2Len(str, "*-", 14) *-*-1234567890
leftPad2Len(str, "*", 14) ****1234567890
leftPad2Len(str, "*-x", 14) x*-x1234567890
leftPad2Len(str, "ABCDE", 14) BCDE1234567890
leftPad2Len(str, "ABCDE", 4) 7890
rightPad(str, "*", 3) 1234567890***
rightPad(str, "*!", 3) 1234567890*!*!*!
rightPad2Len(str, "*-", 13) 1234567890*-*
rightPad2Len(str, "*-", 14) 1234567890*-*-
rightPad2Len(str, "*", 14) 1234567890****
rightPad2Len(str, "*-x", 14) 1234567890*-x*
rightPad2Len(str, "ABCDE", 14) 1234567890ABCD
rightPad2Len(str, "ABCDE", 4) 1234
func lpad(s string,pad string, plength int)string{
for i:=len(s);i<plength;i++{
s=pad+s
}
return s
}
lpad ("3", "0", 2) résultat: "03"
lpad ("12", "0", 6) résultat: "000012"