Heim > Backend-Entwicklung > Golang > 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
Freigeben: 2024-10-24 02:18:29
Original
783 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage