Bagaimana cara mencetak angka atau membuat string dengan bantalan nol agar lebarnya tetap?
Misalnya, jika saya punya nomor 12dan saya ingin membuatnya 000012.
Bagaimana cara mencetak angka atau membuat string dengan bantalan nol agar lebarnya tetap?
Misalnya, jika saya punya nomor 12dan saya ingin membuatnya 000012.
Jawaban:
Paket fmt dapat melakukan ini untuk Anda:
fmt.Printf("|%06d|%6d|\n", 12, 345)
Perhatikan 0 dalam% 06d, yang akan membuatnya menjadi lebar 6 dan mengisinya dengan nol. Yang kedua akan diisi dengan spasi.
Anda dapat melihatnya beraksi di sini: http://play.golang.org/p/cinDspMccp
Sprintfsebagai penggantiPrintf
Gunakan Printffungsi dari paket fmt dengan a widthof 6dan karakter padding 0:
import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'
Mengatur widthkarya dengan meletakkan integer tepat sebelum penentu format ('verb'):
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'
Karakter pengisi yang didukung oleh Golang (dan sebagian besar bahasa lainnya) adalah spasi dan 0:
fmt.Printf("%6d", 12) // Default padding is spaces, prints ' 12'
fmt.Printf("%06d", 12) // Change to 0 padding, prints '000012'
Anda dapat membenarkan pencetakan dengan menambahkan tanda minus -:
fmt.Printf("%-6d", 12) // Padding right-justified, prints '12 '
Berhati-hatilah karena untuk bilangan floating point, lebarnya mencakup seluruh format string:
fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)
Penting untuk diperhatikan bahwa lebar juga dapat disetel secara terprogram dengan menggunakan *sebagai ganti angka dan meneruskan lebar sebagai intparameter:
myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before
Ini mungkin berguna misalnya jika nilai terbesar yang ingin Anda cetak hanya diketahui saat runtime (disebut maxValdalam contoh berikut):
myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)
Terakhir, jika Anda tidak ingin mencetak stdouttetapi mengembalikan String, gunakan Sprintfjuga dari paket fmt dengan parameter yang sama:
s := fmt.Sprintf("%06d", 12) // returns '000012' as a String
Ada satu cara termudah untuk mencapai ini. Menggunakan
func padNumberWithZero(value uint32) string {
return fmt.Sprintf("%02d", value)
}
fmt.Sprintfmemformat dan mengembalikan string tanpa mencetaknya di mana pun. Di sini %02dtertulis pad nol di kiri untuk nilai yang memiliki <2 jumlah digit. Jika nilai yang diberikan memiliki 2 digit atau lebih, itu tidak akan pad. Sebagai contoh:
Anda dapat menggunakan %03datau lebih untuk lebih banyak pengisi nol.
Pertanyaan " Daftar format pencetakan di Go lang " mengingatkan kita bahwa ada juga benderanya:
-pad dengan spasi di kanan, bukan di kiri (kolom rata kiri)
Anda dapat melihat lebih banyak contoh padding dengan DaddyOh/golang-samples/pad.go, jika Anda ingin padding dengan urutan string lain (lebih kompleks daripada ' 0' atau ' '):
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)Lihat 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
-hanya memberi spasi, saya butuh nol.