golang.org/x/text/currency による通貨の書式設定
Go で値を通貨として書式設定する場合、golang.org/x /text/currency パッケージは便利なソリューションを提供します。ただし、出力にカンマまたは桁区切り記号が含まれていない場合、この記事では考えられる原因と解決策を検討します。
間違った書式設定: ポイントとカンマ
提供されたコード内この問題は、message.NewPrinter が提供するより包括的な書式設定を使用せずに、currency.Symbol を直接使用することで発生します。正しいアプローチは、message.NewPrinter を使用して適切な言語固有の書式設定を処理することです。
<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>
システム ロケール リソース
システム ロケール リソースを使用して通貨を書式設定するには、この解決策では、言語コードから形式を推測する必要があります。これは、display.Tags を使用して実現できます:
<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>
または、ISO 通貨コードを解析できますが、出力言語は個別に指定する必要があります:
<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>
丸め要件
特定の通貨では、増分単位で四捨五入する必要があります (例: 0.05 または 0.50)。これに対応するには、正しい IncrementString を Decimal フォーマッタに提供するための追加処理が必要です。
<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>
これらのアプローチを利用することで、golang.org/x/text/ を使用して Go で通貨値をフォーマットすることが可能になります。システム ロケール リソースまたは ISO 通貨コードに基づいて正しいローカリゼーションと書式設定を確保しながら通貨を設定します。
以上がgolang.org/x/text/currency を使用して Go で通貨の書式設定の問題を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。