Formatage de la devise dans Go avec le symbole monétaire de golang.org/x/text/currency
Le golang.org/x/text/ Le package de devises fournit une prise en charge étendue pour le formatage des valeurs monétaires. Cet article montre comment exploiter Currency.Symbol pour obtenir un formatage approprié, en résolvant les problèmes courants tels que les séparateurs de milliers incorrects et le placement des points.
Problème :
Les utilisateurs rencontrent le problème qui leur sortie manque de séparateurs de milliers et affiche incorrectement des points au lieu de virgules pour le formatage de la devise.
Problème sous-jacent :
Le problème provient du comportement par défaut de monnaie.Symbol, qui renvoie le symbole de la devise sans aucun formatage spécifique aux paramètres régionaux. Par conséquent, les points décimaux et les séparateurs de milliers ne sont pas correctement appliqués.
Solution 1 : Déduire le format monétaire à partir du code de langue
Une solution consiste à déduire le format monétaire à partir du code de langue utilisé dans le package de langue. En définissant la langue de l'imprimante sur les paramètres régionaux souhaités, la sortie sera formatée selon les conventions des paramètres régionaux. Par exemple, pour le portugais brésilien, le résultat serait au format « R$ 123 456,78 ».
<code class="go">package main import ( "golang.org/x/text/currency" "golang.org/x/text/language" "golang.org/x/text/message" ) func main() { unit, _ := currency.ParseISO("BRL") const valor = 12345678 p := message.NewPrinter(language.BrazilianPortuguese) formatted := p.Sprint(currency.Symbol(unit.Amount(float64(valor) / 100))) println(formatted) // Output: R$ 123.456,78 }</code>
Solution 2 : analyse des codes de devises ISO et spécification de la langue
Une autre approche consiste à analyser les codes de devise ISO et à définir explicitement la langue de formatage. Cette méthode offre plus de flexibilité dans la spécification du format de sortie souhaité.
<code class="go">package main import ( "golang.org/x/text/currency" "golang.org/x/text/language" "golang.org/x/text/message" "golang.org/x/text/number" ) func main() { unit, _ := currency.ParseISO("BRL") const valor = 12345678 lang := language.Portuguese p := message.NewPrinter(lang) formatted := p.Sprintf( number.Format("%q%v", currency.Symbol(unit.Amount(float64(valor) / 100), lang), number.Decimal(valor, number.Scale(2)), )) println(formatted) // Output: R$ 123.456,78 }</code>
Considérations relatives aux devises arrondies de manière incrémentielle
Pour les devises arrondies de manière incrémentielle (par exemple, de 0,05 ou 0.50), un traitement supplémentaire est nécessaire pour fournir au formateur décimal une IncrementString appropriée. Cela garantit que les valeurs arrondies sont formatées de manière appropriée.
Conclusion
En utilisant Currency.Symbol en conjonction avec l'impression sensible au langage, les développeurs peuvent obtenir un formatage précis des devises dans Go , résolvant les problèmes courants de séparateurs de milliers incorrects et de points décimaux mal placés.
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!