Maison > développement back-end > Golang > le corps du texte

Comment résoudre les problèmes de formatage des devises dans Go à l'aide de golang.org/x/text/currency

Patricia Arquette
Libérer: 2024-10-24 02:18:29
original
672 Les gens l'ont consulté

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

Formatage de devises avec golang.org/x/text/currency

Lors du formatage de valeurs en tant que devise dans Go, golang.org/x Le package /text/currency fournit une solution pratique. Cependant, si le résultat apparaît sans virgules ni séparateurs de milliers, cet article explore les causes potentielles et les solutions.

Formatage incorrect : points contre virgules

Dans le code fourni , le problème vient de l'utilisation directe de monnaie.Symbol au lieu d'utiliser le formatage plus complet fourni par message.NewPrinter. L'approche correcte consiste à utiliser message.NewPrinter pour gérer le formatage spécifique à la langue approprié :

<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>
Copier après la connexion

Ressources locales du système

Pour formater la devise à l'aide des ressources locales du système, la solution nécessite de déduire le format du code de langue. Ceci peut être réalisé en utilisant display.Tags :

<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>
Copier après la connexion

Alternativement, les codes de devise ISO peuvent être analysés, mais la langue de sortie doit être spécifiée séparément :

<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>
Copier après la connexion

Exigences d'arrondi

Certaines devises nécessitent un arrondi par incréments (par exemple, 0,05 ou 0,50). Pour cela, un traitement supplémentaire est nécessaire pour fournir la chaîne d'incrémentation correcte au formateur décimal :

<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>
Copier après la connexion

En utilisant ces approches, il devient possible de formater les valeurs monétaires dans Go en utilisant golang.org/x/text/ devise tout en garantissant une localisation et un formatage corrects en fonction des ressources locales du système ou des codes de devise ISO.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!