Jai*_*rak 9 string localization string-formatting go
我正在打印浮点值(例如:52.12:),如下所示:
fmt.Sprintf("%.2f%s", percentageValue, "%%")
Run Code Online (Sandbox Code Playgroud)
输出就像52.12%.但我想用英文以外的其他语言打印,小数点是逗号,.如何在Go中使用fmt.Sprintf.我想要这样的输出52,12%.
标准库(和fmt包)不支持本地化文本和数字格式。
如果您只需要本地化小数点,您可以使用简单的方法将点 ( .) 替换为逗号字符 ( ,),如下所示:
percentageValue := 52.12
s := fmt.Sprintf("%.2f%%", percentageValue)
s = strings.Replace(s, ".", ",", -1)
fmt.Println(s)
Run Code Online (Sandbox Code Playgroud)
(另请注意,您可以%通过%%在格式字符串中使用 2 个百分号来输出百分号。)
哪些输出(在Go Playground上试试):
52,12%
Run Code Online (Sandbox Code Playgroud)
或者使用映射函数:
func dot2comma(r rune) rune {
if r == '.' {
return ','
}
return r
}
func main() {
percentageValue := 52.12
s := fmt.Sprintf("%.2f%%", percentageValue)
s = strings.Map(dot2comma, s)
fmt.Println(s)
}
Run Code Online (Sandbox Code Playgroud)
输出是一样的。在Go Playground上试试这个。
另一种解决方案可能是分别格式化整数和小数部分,并用逗号将它们粘在一起,:
percentageValue := 52.12
i, f := math.Modf(percentageValue)
s := fmt.Sprint(i) + "," + fmt.Sprintf("%.2f%%", f)[2:]
fmt.Println(s)
Run Code Online (Sandbox Code Playgroud)
在Go Playground上试试这个。
请注意,如果百分比值为负,则后一种解决方案需要“调整”:
percentageValue := -52.12
i, f := math.Modf(percentageValue)
if f < 0 {
f = -f
}
s := fmt.Sprint(i) + "," + fmt.Sprintf("%.2f%%", f)[2:]
fmt.Println(s)
Run Code Online (Sandbox Code Playgroud)
这个修改后的版本现在可以-52,12%正确打印。在Go Playground上试一试。
如果您需要“完整的”本地化支持,那么请检查并使用golang.org/x/text/message,它“使用类似于 fmt 的打印功能的功能为本地化字符串实现格式化的 I/O。它是 fmt 的直接替代品。”
| 归档时间: |
|
| 查看次数: |
1610 次 |
| 最近记录: |