【Golang】以千位为单位,将数字以逗号分隔输出【千位分隔格式输出】
我想在 Go 语言(以下简称 Golang)中,将 int(1000) 格式化输出为 “1,000”,并以逗号分隔。但是发现 fmt 包里似乎没有提供专门的函数。该怎么办呢?
是否能够在 golang.org 管辖的包中进行格式化,而不需要单独实现或使用第三方包。
由于在搜索” golang逗号分隔 逗号分隔 输出格式”时,发现只有一些涉及独特实现或处理逗号分隔输入的内容,所以我想查找一些更适合我的搜索结果。
太长懒得读(今北产业)
-
- 可以使用Go的准标准模块golang.org/x/text的message包来实现。
message是一个根据本地化语言进行文本格式化的工具库,可以作为fmt的替代品。
不同国家对于数字的千位分隔符和小数点的表示方法是不同的,使用message可以进行调整。
主人,请给我一个运行的示例。
package main
import (
“golang.org/x/text/language”
“golang.org/x/text/message”
)
func main() {
value := 1000
p := message.NewPrinter(language.Japanese)
p.Printf(“%d\n”, value)
// 输出结果: 1,000
}
点击链接在Go Playground中查看运行结果
不同语言环境下的表示差异
package main
import (
“golang.org/x/text/language”
“golang.org/x/text/message”
“golang.org/x/text/number”
)
func main() {
value := 1234567.89
for _, langTag := range []language.Tag{
language.English,
language.Japanese,
language.French,
} {
p := message.NewPrinter(langTag)
p.Println(langTag)
p.Printf(” Message: %f\n”, value)
p.Printf(” Number : %v\n”, number.Decimal(value))
}
// 输出结果:
// en
// Message: 1,234,567.890000
// Number : 1,234,567.89
// ja
// Message: 1,234,567.890000
// Number : 1,234,567.89
// fr
// Message: 1 234 567,890000
// Number : 1 234 567,89
}
点击链接在Go Playground中查看运行结果
太长没看;总结一下
千位分隔符逗号的用法因国家而异。
您知道小数点和数字分隔符的表示方法在不同国家是不同的吗?
举个例子,在日本,数值1234567.89 可以写作1,234,567.89,也可以写作1.234.567,89、12,34,567.89、1 234 567,89或者1’234’567,89等等,不同于日本的国家也有不同的写法。
考虑到在日本也存在「一百二十三万四千五百六十七点八九」的表示方法,我也能理解。
还有一些国家也使用日期2001年10月11日,但它们用的是YMD格式的日期表示法,例如11/10/01(DMY)或10/11/01(MDY)。
即不同国家使用不同的数字表示方式。
將表記本地化
因此,将其转换为“适合该国的描述方式”被称为“本地化”。
您有没有试过在操作系统中更改“地区设置(locale)”后,发现数字和日期的表示方式发生了变化?就是那个东西。
我翻译了以下抜粋自信息的内容。
本地化格式化
通过将fmt的任何打印函数替换为对Printer的等效调用,可以本地化格式化字符串。
p := message.NewPrinter(message.MatchLanguage(“en”))
p.Println(123456.78) // 输出:123,456.78p.Printf(“%d只鸭子排成一行”, 4331) // 输出:4,331只鸭子排成一行
p := message.NewPrinter(message.MatchLanguage(“nl”))
p.Printf(“高度:%.1f米”, 1244.9) // 输出:高度:1,244.9米p := message.NewPrinter(message.MatchLanguage(“bn”))
p.Println(123456.78) // 输出:১,২৩,৪৫৬.৭৮Printer目前支持数字和x/text中存在的特殊类型。计划支持其他内置类型,如time.Time和slices。
格式化字符串与fmt基本相同,但有以下显着差异:标志#始终使用fmt进行打印
动词’f’、’e’、’g’、’d’使用本地化格式化,除非指定了’#’标志。
动词’m’插入字符串参数的翻译。更多选项请参阅fmt包。
引用文献
Localized Formatting | message | text | golang.org @ pkg.go.dev
“How to fmt.Printf an integer with thousands comma” @ Stackoverflow