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{"en_US", "pt_BR", "de", "ja", "hi"} { 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("%24v (%v): %v%v\n", 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{"USD", "BRL", "EUR", "JPY", "INR"} { 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("%v: %v%v\n", 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("%24v %v, %4s-rounding: %3v%v\n", 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!