我想將一個大整數格式化為帶有前導零的字符串。我正在尋找一個與此類似的示例,但具有 Big:我在這里查看源代碼。但是當我打電話時:m := big.NewInt(99999999999999)fmt.Println(m.Format("%010000000000000000000","d"))我懂了:prog.go:10:22: m.Format("%010000000000000000000", "d") used as valueprog.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 回答

皈依舞
TA貢獻1851條經驗 獲得超3個贊
您可以簡單地使用fmt.Sprintf(...)
指令"%020s"
(其中 20 是您想要的任何總長度)。動詞s
將使用 big int 的自然字符串格式,020
修飾符將創建一個總長度(至少)為 20 且零填充(而不是空格)的字符串。
例如(去游樂場):
m := big.NewInt(99999999999999)
s := fmt.Sprintf("%020s", m)
fmt.Println(s)
// 00000099999999999999

慕妹3146593
TA貢獻1820條經驗 獲得超9個贊
這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)
000099 000000000000000000001234567890123456789012345678901234567890
這是最簡單的,所以使用它。手動創建一個fmt.Formatter
給你更多的控制權,但也更難做到。除非這是您應用程序的性能關鍵部分,否則只需使用上述解決方案。
- 2 回答
- 0 關注
- 178 瀏覽
添加回答
舉報
0/150
提交
取消