我正在打印浮点值(例如:52.12
),如下所示:
fmt.Sprintf("%.2f%s", percentageValue, "%%")
输出类似于52.12%
。但我想用英语以外的其他语言打印,小数点是逗号,
。如何使用fmt.Sprintf
在Go中执行此操作。我希望输出像 52,12%。
答案 0 :(得分:12)
HADOOP_USER_NAME=hdfs hdfs dfs -rm -R -f -skipTrash /
包不支持替换浮点数中的分隔符的功能。您应该使用专为此目的而设计的golang.org/x/text/message包。
答案 1 :(得分:3)
标准lib(和fmt
包)不支持本地化文本和数字格式
如果您只需要对小数点进行本地化,则可以使用简单的方法将点(.
)替换为逗号字符(,
),如下所示:
percentageValue := 52.12
s := fmt.Sprintf("%.2f%%", percentageValue)
s = strings.Replace(s, ".", ",", -1)
fmt.Println(s)
(另请注意,您可以在格式字符串中使用2%符号%
输出百分号%%
。)
哪些输出(在Go Playground上尝试):
52,12%
或使用映射功能:
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)
}
输出是一样的。在Go Playground上试试这个。
另一个解决方案可能是分别格式化整数和小数部分,并用逗号,
符号将它们粘合在一起:
percentageValue := 52.12
i, f := math.Modf(percentageValue)
s := fmt.Sprint(i) + "," + fmt.Sprintf("%.2f%%", f)[2:]
fmt.Println(s)
在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)
此修改后的版本现在可以正确打印-52,12%
。在Go Playground上尝试。
如果您需要&#34;完整&#34;本地化支持,然后检查并使用golang.org/x/text/message
,其中&#34;为本地化字符串实现格式化I / O,其功能类似于fmt的打印功能。它是fmt的替代品。&#34;
答案 2 :(得分:2)
我找到了一个可以做到这一点的图书馆,它被称为人性化。
有了这个,您可以执行类似fmt.Println(humanize.FormatFloat("00,00", 52.20))
请参阅以下链接中的说明: https://github.com/dustin/go-humanize
答案 3 :(得分:1)
我已经解决了这个问题:
func getFormattedValue(percentageValue float64) string{
value := fmt.Sprintf("%.2f%s", percentageValue, "%")
return strings.Replace(value, ".", ",", -1)
}
我正在使用浮动值并转换为字符串,然后将.
替换为,