如何在 Go 中格式化货币字符串?

问题描述 投票:0回答:1

我正在尝试将 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 语言构建状态和符文?

go currency
1个回答
0
投票

您不直接使用

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
© www.soinside.com 2019 - 2024. All rights reserved.