Heim  >  Artikel  >  Backend-Entwicklung  >  So beheben Sie Probleme mit der Währungsformatierung in Go mithilfe von golang.org/x/text/currency

So beheben Sie Probleme mit der Währungsformatierung in Go mithilfe von golang.org/x/text/currency

Patricia Arquette
Patricia ArquetteOriginal
2024-10-24 02:18:29664Durchsuche

How to Fix Currency Formatting Issues in Go Using golang.org/x/text/currency

Währungsformatierung mit golang.org/x/text/currency

Beim Formatieren von Werten als Währung in Go wird golang.org/x Das Paket /text/currency bietet eine praktische Lösung. Wenn die Ausgabe jedoch ohne Kommas oder Tausendertrennzeichen erscheint, werden in diesem Artikel die möglichen Ursachen und Lösungen untersucht.

Falsche Formatierung: Punkte vs. Kommas

Im bereitgestellten Code , entsteht das Problem durch die direkte Verwendung von „currency.Symbol“ anstelle der umfassenderen Formatierung, die von „message.NewPrinter“ bereitgestellt wird. Der richtige Ansatz besteht darin, message.NewPrinter zu verwenden, um die entsprechende sprachspezifische Formatierung zu verarbeiten:

<code class="go">func (produto *Produto) FormataPreco(valor int64) string {
    unit, _ := currency.ParseISO("BRL")
    p := message.NewPrinter(language.BrazilianPortuguese)
    return p.Sprint(unit.Amount(float64(valor) / 100))
}</code>

Systemgebietsschemaressourcen

Um die Währung mithilfe von Systemgebietsschemaressourcen zu formatieren, Die Lösung erfordert die Ableitung des Formats aus dem Sprachcode. Dies kann mit display.Tags erreicht werden:

<code class="go">n := display.Tags(language.English)
for _, lcode := range []string{&quot;en_US&quot;, &quot;pt_BR&quot;, &quot;de&quot;, &quot;ja&quot;, &quot;hi&quot;} {
    lang := language.MustParse(lcode)
    cur, _ := currency.FromTag(lang)
    scale, _ := currency.Cash.Rounding(cur) // fractional digits
    dec := number.Decimal(100000.00, number.Scale(scale))
    p := message.NewPrinter(lang)
    p.Printf(&quot;%24v (%v): %v%v\n&quot;, n.Name(lang), cur, currency.Symbol(cur), dec)
}</code>

Alternativ können ISO-Währungscodes geparst werden, die Ausgabesprache muss jedoch separat angegeben werden:

<code class="go">for _, iso := range []string{&quot;USD&quot;, &quot;BRL&quot;, &quot;EUR&quot;, &quot;JPY&quot;, &quot;INR&quot;} {
    cur := currency.MustParseISO(iso)
    scale, _ := currency.Cash.Rounding(cur) // fractional digits
    dec := number.Decimal(100000.00, number.Scale(scale))
    p := message.NewPrinter(language.English)
    p.Printf(&quot;%v: %v%v\n&quot;, cur, currency.Symbol(cur), dec)
}</code>

Rundungsanforderungen

Bestimmte Währungen erfordern eine Rundung in Schritten (z. B. 0,05 oder 0,50). Um dies zu berücksichtigen, ist eine zusätzliche Verarbeitung erforderlich, um dem Dezimalformatierer den richtigen IncrementString bereitzustellen:

<code class="go">scale, incCents := currency.Cash.Rounding(cur) // fractional digits
incFloat := math.Pow10(-scale) * float64(incCents)
incFmt := strconv.FormatFloat(incFloat, 'f', scale, 64)
dec := number.Decimal(100000.26,
    number.Scale(scale), number.IncrementString(incFmt))
p.Printf(&quot;%24v %v, %4s-rounding: %3v%v\n&quot;,
    n.Name(lang), cur, incFmt, currency.Symbol(cur), dec)</code>

Durch die Verwendung dieser Ansätze wird es möglich, Währungswerte in Go mit golang.org/x/text/ zu formatieren. Währung und stellt gleichzeitig eine korrekte Lokalisierung und Formatierung basierend auf Systemgebietsschemaressourcen oder ISO-Währungscodes sicher.

Das obige ist der detaillierte Inhalt vonSo beheben Sie Probleme mit der Währungsformatierung in Go mithilfe von golang.org/x/text/currency. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn