Golang 中正确的货币格式
使用货币格式时,必须考虑每种货币和语言组合的具体要求。使用 golang.org/x/text/currency,您可以根据本地约定轻松格式化值。但是,您在获得所需的输出时可能会遇到一些挑战。
使用货币符号
在您的代码中,您使用currency.Symbol 来检索货币符号指定的 ISO 代码。但是,在不提供语言上下文的情况下使用此方法时,您可能无法获得预期的分隔符或数字格式。
合并本地格式
而不是尝试手动创建您可以利用显示和消息包根据语言和区域自动检索适当的格式。这是一个示例:
import (
"fmt"
"golang.org/x/text/currency"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
func formatCurrency(value int64, currencyCode string, languageCode string) string {
lang, _ := language.Parse(languageCode)
p := message.NewPrinter(lang)
unit, _ := currency.ParseISO(currencyCode)
return p.Sprintf("%v%v", currency.Symbol(unit), float64(value))
}
此函数接受值、货币代码和语言代码,并返回格式正确的货币字符串。
处理增量单位
一些货币有固定的增量单位,例如 5 或 10 美分。为了解决这个问题,您可以使用数字包来指定增量:
import (
"golang.org/x/text/currency"
"golang.org/x/text/number"
)
func formatWithIncrement(value int64, currencyCode string, increment int) string {
unit, _ := currency.ParseISO(currencyCode)
scale, inc := currency.Cash.Rounding(unit)
dec := number.Decimal(float64(value), number.Scale(scale), number.IncrementString(fmt.Sprintf("%.2f", float64(inc))))
return fmt.Sprintf("%v%v", currency.Symbol(unit), dec)
}
通过提供语言上下文、从语言代码推断货币格式并考虑增量单位,您可以使用 golang.org/x/text/currency 在 Golang 中创建灵活且准确的货币格式化解决方案。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3