golang.org/x/text/currency の Currency.Symbol を使用した Go の通貨書式設定
golang.org/x/text/通貨パッケージは、通貨値のフォーマットに関する広範なサポートを提供します。この記事では、Currency.Symbol を活用して適切な書式設定を実現し、不正な桁区切り記号や点の配置などの一般的な問題に対処する方法を説明します。
問題:
ユーザーは次の問題に遭遇します。出力には桁区切り文字が欠落しており、通貨の書式設定ではコンマではなくポイントが誤って表示されます。
根本的な問題:
この問題は、currency.Symbol のデフォルトの動作に起因しています。ロケール固有の書式設定を行わずに通貨記号を返します。その結果、小数点と桁区切り記号が正しく適用されません。
解決策 1: 言語コードから通貨形式を推測する
解決策の 1 つは、言語コードから通貨形式を推測することです。言語パッケージで使用される言語コード。プリンターの言語を目的のロケールに設定すると、出力はロケールの規則に従ってフォーマットされます。たとえば、ブラジル系ポルトガル語の場合、出力は「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>
解決策 2: ISO 通貨コードの解析と言語の指定
もう 1 つのアプローチは、ISO 通貨コードを解析し、フォーマット用の言語を明示的に設定することです。この方法では、目的の出力形式をより柔軟に指定できます。
<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>
増分的に四捨五入される通貨に関する考慮事項
増分的に四捨五入される通貨の場合 (例: 0.05 または0.50) の場合、Decimal フォーマッタに適切な IncrementString を提供するには追加の処理が必要です。これにより、丸められた値が適切に書式設定されることが保証されます。
結論
Currency.Symbol を言語対応の印刷と組み合わせて利用することで、開発者は Go で正確な通貨書式設定を実現できます。 、桁区切り記号の誤りや小数点の位置の誤りなどの一般的な問題に対処します。
以上がGo で Currency.Symbol の通貨書式設定の問題を修正する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。