我正在尝试将 float64 货币“1000.99”转换为字符串“£1,000.99”。 货币并不总是 £,我希望装饰能够特定于语言/区域(例如,某些地方将其格式设置为“£1.000.99”,其他地方可能将其格式设置为“£10,00.99”。
我有货币和语言的 ISO 代码,并且我找到了包 golang.org/x/currency,但文档并没有真正说明它的实际工作原理。 到目前为止,我有以下内容:
func Format(val float64, currency, language string) (string, error) {
unit, err := currency.ParseISO(currency)
if err != nil {
return err
}
amount := unit.Amount(val)
// I know I need to call amount.Format(state, rune), but I have no idea how to create a state or a rune?
}
如何为给定的 ISO 语言构建状态和符文?
您不直接使用
amount.Format
,而是通过message.Printer
(Go Playground):
package main
import (
"golang.org/x/text/currency"
"golang.org/x/text/language"
"golang.org/x/text/message"
)
func main() {
amount := currency.GBP.Amount(1000.99)
LangPrint(language.English, amount)
LangPrint(language.German, amount)
}
func LangPrint(t language.Tag, amount currency.Amount) {
p := message.NewPrinter(t)
p.Printf("%v: %v\n", t, amount)
}
打印
en: GBP 1,000.99
de: GBP 1.000,99