【问题标题】:Go - How to format number digit count [duplicate]Go - 如何格式化数字计数[重复]
【发布时间】:2015-06-20 16:18:03
【问题描述】:

如何在 go 中格式化 int 以确保始终有两位数? 例如,1 将被格式化为01

【问题讨论】:

    标签: go


    【解决方案1】:

    您可以使用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)
    

    文档:https://golang.org/pkg/fmt/

    【讨论】:

    • 谢谢!它可以工作,但无论如何我可以在不将其分配给变量的情况下做到这一点。因此,如果我需要将一些字符串连接在一起,我就不必创建数千个变量。
    • 我收到此错误:如果我不这样做,则在单值上下文中使用多值 fmt.Printf():x, _ = fmt.Sprintf("%02d", 1)
    • 我更新了答案以包含用于直接打印和分配给变量的示例代码。
    • fmt.Printf() 将返回一个整数和错误。整数表示打印的字节数。如果要捕获它,则需要同时考虑字节数和错误。
    • 我在尝试像这样直接打印时仍然遇到同样的错误:fmt.Printf("%02d", rand.Intn(12))
    【解决方案2】:

    您应该查看fmt.Printf 文档。它解释了所有的格式化标志。您正在寻找的具体是020 表示您想用前导零将数字填充到指定宽度。 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
    

    【讨论】:

    • 一个错误告诉我需要将值分配给一个变量:单值上下文中的多值 fmt.Printf()
    • 你叫 Printf 怎么样?
    • fmt.Printf("%02d", rand.Intn(12))
    【解决方案3】:

    另一种选择:

    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)
    }
    

    https://pkg.go.dev/golang.org/x/text/number

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      • 2012-01-28
      • 1970-01-01
      • 2016-10-07
      相关资源
      最近更新 更多