Bir sayıyı nasıl yazdırabilirim veya sıfır dolgulu bir dizeyi sabit genişlikte yapmak için nasıl yapabilirim?
Örneğin, numaram varsa 12
ve yapmak istersem 000012
.
Bir sayıyı nasıl yazdırabilirim veya sıfır dolgulu bir dizeyi sabit genişlikte yapmak için nasıl yapabilirim?
Örneğin, numaram varsa 12
ve yapmak istersem 000012
.
Yanıtlar:
Fmt paketi bunu sizin için yapabilir:
fmt.Printf("|%06d|%6d|\n", 12, 345)
Çıktı:
|000012| 345|
% 06d'deki 0'a dikkat edin, bu onu 6 genişliğinde yapar ve onu sıfırlarla doldurur. İkincisi boşluklarla doldurulacaktır.
Burada kendiniz deneyin: http://play.golang.org/p/cinDspMccp
Sprintf
bunun yerine kullanınPrintf
Kullanım Printf
gelen işlevi fmt paketinin bir ile width
ait 6
ve dolgu karakteri 0
:
import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'
width
Biçim belirticisinin ('fiil') hemen önüne bir tamsayı koyarak çalışmaları ayarlama :
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'
Golang (ve diğer birçok dil) tarafından desteklenen tek dolgu karakterleri boşluklardır ve 0
:
fmt.Printf("%6d", 12) // Default padding is spaces, prints ' 12'
fmt.Printf("%06d", 12) // Change to 0 padding, prints '000012'
Başına bir eksi ekleyerek baskıyı sağa yaslamak mümkündür -
:
fmt.Printf("%-6d", 12) // Padding right-justified, prints '12 '
Kayan noktalı sayılar için genişliğin tüm biçim dizesini içerdiğine dikkat edin:
fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)
Genişliğin, *
bir sayı yerine kullanarak ve genişliği bir int
parametre olarak ileterek programlı olarak da ayarlanabileceğini not etmek faydalıdır :
myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before
Bu, örneğin yazdırmak istediğiniz en büyük değer yalnızca çalışma zamanında biliniyorsa yararlı olabilir ( maxVal
aşağıdaki örnekte çağrılır ):
myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)
Son olarak, yazdırmak istemiyor stdout
ancak bir Dize döndürmek istiyorsanız , aynı parametrelerle fmt paketindenSprintf
de kullanın :
s := fmt.Sprintf("%06d", 12) // returns '000012' as a String
Bunu başarmanın en basit bir yolu var. Kullanım
func padNumberWithZero(value uint32) string {
return fmt.Sprintf("%02d", value)
}
fmt.Sprintf
herhangi bir yere yazdırmadan bir dizeyi biçimlendirir ve döndürür. Burada %02d
<2 basamaklı değer için solda sıfır ped yazıyor. Verilen değer 2 veya daha fazla basamağa sahipse doldurulmayacaktır. Örneğin:
Daha %03d
fazla sıfır dolgusu için veya daha fazlasını kullanabilirsiniz .
" Go lang'da baskı formatı listesi " sorusu bize bir bayrağın da olduğunu hatırlatır:
-
sol yerine sağda boşluklar bulunan ped (alanı sola yaslayın)
DaddyOh/golang-samples/pad.go
Diğer dize dizileriyle ( 0
"veya" ' ' den daha karmaşık) doldurmak istiyorsanız, daha fazla dolgu örneği görebilirsiniz :
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)
Bakınız 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
Sağ pedi isteyenler için bunu yapabilirsiniz:
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
-
sadece boşluk verir, sıfırlara ihtiyacım var.