我想将一个大整数格式化为带有前导零的字符串。我正在寻找一个与此类似的示例,但具有 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 关注
- 132 浏览
添加回答
举报
0/150
提交
取消