【发布时间】:2015-06-20 16:18:03
【问题描述】:
如何在 go 中格式化 int 以确保始终有两位数?
例如,1 将被格式化为01。
【问题讨论】:
标签: go
如何在 go 中格式化 int 以确保始终有两位数?
例如,1 将被格式化为01。
【问题讨论】:
标签: go
您可以使用fmt.Printf() 或fmt.Sprintf() 创建一个左填充零的字符串。 fmt.Printf() 将打印数据,而 fmt.Sprintf() 将允许您将结果字符串分配给变量。
以下是文档中的签名:
func Printf(format string, a ...interface{}) (n int, err error)
func Sprintf(format string, a ...interface{}) string
例如:
// Printing directly using fmt.Printf()
fmt.Printf("%02d\n", 1)
// With output assignment
count, err := fmt.Printf("%02d\n", 1)
if err == nil {
fmt.Printf("Printed %v bytes\n", count)
} else {
fmt.Println("Error printing")
}
// Assigning to variable using fmt.Sprintf()
formatted := fmt.Sprintf("%02d", 1)
fmt.Println(formatted)
【讨论】:
fmt.Printf() 将返回一个整数和错误。整数表示打印的字节数。如果要捕获它,则需要同时考虑字节数和错误。
您应该查看fmt.Printf 文档。它解释了所有的格式化标志。您正在寻找的具体是0 和2。 0 表示您想用前导零将数字填充到指定宽度。 2 表示您想要的宽度,这两个标志一起将用前导 0 填充单个数字,但忽略长度为 2 位或更大的数字。
package main
import "fmt"
func main() {
for i := 1; i <= 10; i++ {
fmt.Printf("%02d\n", i)
}
}
输出:
01
02
03
04
05
06
07
08
09
10
【讨论】:
另一种选择:
package main
import (
"golang.org/x/text/language"
"golang.org/x/text/message"
"golang.org/x/text/number"
)
var fmt = message.NewPrinter(language.English)
func main() {
n := number.Decimal(
1, number.Pad('0'), number.FormatWidth(2),
)
fmt.Println(n)
}
【讨论】: