Як я можу надрукувати номер або зробити рядок із нульовим накладом, щоб він зміг встановити ширину?
Наприклад, якщо у мене є номер, 12і я хочу його зробити 000012.
Як я можу надрукувати номер або зробити рядок із нульовим накладом, щоб він зміг встановити ширину?
Наприклад, якщо у мене є номер, 12і я хочу його зробити 000012.
Відповіді:
Пакет fmt може зробити для вас це:
fmt.Printf("|%06d|%6d|\n", 12, 345)
Зверніть увагу на 0 в% 06d, що зробить його шириною 6 і обкладіть нулями. Другий буде заповнено пробілами.
Ви можете побачити його в дії тут: http://play.golang.org/p/cinDspMccp
SprintfзамістьPrintf
Використовуйте Printfфункцію з FMT пакета з widthз 6і відступу характеру 0:
import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'
Встановлення widthтвору шляхом введення цілого числа, що безпосередньо передує специфікатору формату ('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'
Єдині символи прокладки, які підтримує Golang (і більшість інших мов), - пробіли та 0:
fmt.Printf("%6d", 12) // Default padding is spaces, prints ' 12'
fmt.Printf("%06d", 12) // Change to 0 padding, prints '000012'
Можна правильно виправдати друк, попередньо встановивши мінус -:
fmt.Printf("%-6d", 12) // Padding right-justified, prints '12 '
Будьте уважні, що для чисел з плаваючою комою ширина включає весь рядок формату:
fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)
Корисно зауважити, що ширину також можна встановити програмно, використовуючи *замість числа та передаючи ширину як intпараметр:
myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before
Це може бути корисно, наприклад, якщо найбільше значення, яке ви хочете надрукувати, відоме лише під час виконання (викликається maxValу наступному прикладі):
myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)
Нарешті, якщо ви не хочете друкувати, stdoutале повертати String, використовуйте Sprintfтакож із пакета fmt з тими ж параметрами:
s := fmt.Sprintf("%06d", 12) // returns '000012' as a String
Є один найпростіший спосіб цього досягти. Використовуйте
func padNumberWithZero(value uint32) string {
return fmt.Sprintf("%02d", value)
}
fmt.Sprintfформатує і повертає рядок, не друкуючи ніде. Тут %02dговориться про нульову клавішу зліва для значення, яке має <2 цифри. Якщо дане значення має 2 або більше цифр, воно не заповнюється. Наприклад:
Ви можете використовувати %03dабо більше для більшої кількості нульових відступів.
Питання " Список формату друку в Go lang " нагадує нам, що існує також прапор:
-панель з пробілами праворуч, а не ліворуч (вирівнювання поля зліва)
Ви можете побачити більше прикладів прокладки DaddyOh/golang-samples/pad.go, якщо ви хочете прокладати інші послідовності рядків (складніші, ніж ' 0' або ' '):
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)Дивіться 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
-дає лише пробіли, мені потрібні нулі.