Пример использования метода Format с начальным нулевым отступом для Big Ints в Golang - PullRequest
0 голосов
/ 01 октября 2018

Я бы хотел отформатировать большой int как строку с ведущими нулями.Я ищу пример, похожий на this , но с Big:

Я смотрю на источник здесь .

Но когда яcall:

m := big.NewInt(99999999999999)
fmt.Println(m.Format("%010000000000000000000","d"))

Я вижу:

prog.go:10:22: m.Format("%010000000000000000000", "d") used as value
prog.go:10:23: cannot use "%010000000000000000000" (type string) as type fmt.State in argument to m.Format:
    string does not implement fmt.State (missing Flag method)
prog.go:10:48: cannot use "d" (type string) as type rune in argument to m.Format

(обычно я понимаю, что могу использовать m.String (), но заполнение нулями, кажется, усложняет это, поэтому я специально ищудля получения справки о методе Format.)

Вот ссылка на мою игровую площадку .

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Вы можете просто использовать fmt.Sprintf(...) с директивой "%020s" (где 20 - это любая необходимая длина).Глагол s будет использовать естественный формат строки большого int, а модификатор 020 создаст строку общей длиной (как минимум) 20 с нулевым заполнением (вместо пробела).

Дляпример ( Go Playground ):

m := big.NewInt(99999999999999)
s := fmt.Sprintf("%020s", m)
fmt.Println(s)
// 00000099999999999999
0 голосов
/ 01 октября 2018

Int.Format() не для того, чтобы вы звонили вручную (хотя вы могли бы), а для реализации fmt.Formatter, поэтому fmt пакет будет поддерживать форматирование big.Int значений "из коробки".

См. этот пример:

m := big.NewInt(99)
fmt.Printf("%06d\n", m)

if _, ok := m.SetString("1234567890123456789012345678901234567890", 10); !ok {
    panic("big")
}
fmt.Printf("%060d\n", m)

Выходы (попробуйте на Go Playground ):

000099
000000000000000000001234567890123456789012345678901234567890

Это самое простое, так что используйте это.Создание fmt.Formatter вручную дает вам больший контроль, но также сложнее это сделать.Если это не критичная для вашего приложения часть производительности, просто используйте вышеуказанное решение.

...