Jak mogę wydrukować liczbę lub utworzyć ciąg z wypełnieniem zerowym, aby uzyskać stałą szerokość?
Na przykład, jeśli mam numer 12
i chcę to zrobić 000012
.
Pakiet fmt może zrobić to za Ciebie:
fmt.Printf("|%06d|%6d|\n", 12, 345)
Zwróć uwagę na 0 w% 06d, które sprawi, że będzie miał szerokość 6 i dopełni je zerami. Drugi będzie wypełniony spacjami.
Możesz zobaczyć to w akcji tutaj: http://play.golang.org/p/cinDspMccp
-
daje tylko spacje, potrzebuję zer.Sprintf
zamiastPrintf
Użyj
Printf
funkcji z pakietu fmt zwidth
of6
i znakiem dopełniającym0
:import "fmt" fmt.Printf("%06d", 12) // Prints to stdout '000012'
Ustawianie
width
prac przez umieszczenie liczby całkowitej bezpośrednio poprzedzającej specyfikator formatu („czasownik”):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'
Jedynymi znakami dopełnienia obsługiwanymi przez Golang (i większość innych języków) są spacje i
0
:fmt.Printf("%6d", 12) // Default padding is spaces, prints ' 12' fmt.Printf("%06d", 12) // Change to 0 padding, prints '000012'
Możliwe jest wyrównanie wydruku do prawej, dodając minus
-
:fmt.Printf("%-6d", 12) // Padding right-justified, prints '12 '
Uważaj, w przypadku liczb zmiennoprzecinkowych szerokość obejmuje cały ciąg formatu:
fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)
Warto zauważyć, że szerokość można również ustawić programowo, używając
*
zamiast liczby i przekazując szerokość jakoint
parametr:myWidth := 6 fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before
Może to być przydatne na przykład, jeśli największa wartość, którą chcesz wydrukować, jest znana tylko w czasie wykonywania (wywoływana
maxVal
w poniższym przykładzie):myWidth := 1 + int(math.Log10(float64(maxVal))) fmt.Printf("%*d", myWidth, nextVal)
Na koniec, jeśli nie chcesz drukować,
stdout
ale zwracać String, użyjSprintf
również z pakietu fmt z tymi samymi parametrami:s := fmt.Sprintf("%06d", 12) // returns '000012' as a String
źródło
Jest na to jeden najprostszy sposób. Posługiwać się
func padNumberWithZero(value uint32) string { return fmt.Sprintf("%02d", value) }
fmt.Sprintf
formatuje i zwraca ciąg bez drukowania go w dowolnym miejscu. Tutaj%02d
mówi, że pad zero po lewej stronie dla wartości, która ma <2 liczby cyfr. Jeśli podana wartość ma 2 lub więcej cyfr, nie będzie dopełniana. Na przykład:Możesz użyć
%03d
lub więcej, aby uzupełnić więcej zer.źródło
Pytanie " Lista formatów drukowania w Go lang " przypomina nam, że jest też flaga:
Możesz zobaczyć więcej przykładów dopełnienia za pomocą
DaddyOh/golang-samples/pad.go
, jeśli chcesz dopełnić innymi sekwencjami ciągów (bardziej złożonymi niż „0
” lub „”):
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)
Zobacz 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
źródło
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) wynik: "03"
lpad ("12", "0", 6) wynik: "000012"
źródło
Dla tych, którzy chcą mieć odpowiednią podkładkę, możesz to zrobić:
str2pad := "12" padWith := "0" amt2pad := 6 //This will make sure there is always 6 characters total, padded on the right side //Note to check if strings.Repeat returns a negative value paddedStr := str2pad + strings.Repeat(padWith, amt2pad - len(str2pad)) //Outputs 120000
źródło