Подтвердить что ты не робот

Голанг: Как дополнить число нулями при печати?

Как я могу напечатать номер или сделать строку с нулевым заполнением, чтобы сделать ее фиксированной?

Например, если у меня есть номер 12, и я хочу сделать его 000012.

4b9b3361

Ответ 1

Пакет fmt может сделать это для вас:

fmt.Printf("|%06d|%6d|\n", 12, 345)

Обратите внимание на 0 в% 06d, что сделает его шириной 6 и положит его нулями. Второй будет заполняться пробелами.

Вы можете увидеть это в действии здесь: http://play.golang.org/p/cinDspMccp

Ответ 2

Есть один самый простой способ добиться этого. использование

func padNumberWithZero(value uint32) string {
    return fmt.Sprintf("%02d", value)
}

fmt.Sprintf форматирует и возвращает строку, нигде не печатая. Здесь %02d говорит, что нулевое %02d слева для значения, у которого <2 числа цифр. Если данное значение имеет 2 или более цифр, оно не будет дополнено. Например:

  • Если вход 1, выход будет 01.
  • Если вход 12, выход будет 12.
  • Если ввод 1992, вывод будет 1992.

Вы можете использовать %03d или больше для дополнительного заполнения нулями.

Ответ 3

Используйте функцию Printf из пакета fmt с width из 6 и символом заполнения 0:

import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'

Настройка width работает следующим образом:

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, но возвращаете строку, используйте Sprintf также из пакета fmt с такими же параметрами:

s := fmt.Sprintf("%06d", 12) // returns '000012' as a String

Ответ 4

Вопрос "Список формата печати в 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

Ответ 5

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) результат: "03"

lpad ( "12", "0", 6): "000012"