【要約】どんな通貨でも小数点以下の桁数をきれいに表示する方法がめっちゃ簡単だった [Qiita_Trend] | Summary by TechDistill
> Source: Qiita_Trend
Execute Primary Source
// Problem
開発者がサブスクリプション管理アプリ等の実装において、通貨ごとの表示仕様の差異に直面した。
- ・「JPY以外は2桁」という仮定では、KRW(0桁)やBHD(3桁)で誤った表示となる。
- ・ISO 4217の通貨リストを手動管理するのは、通貨の追加や改定への対応が困難で非効率である。
- ・ロケールを未指定にすると、実行環境によって桁区切り記号が変わり、CI環境でのテストが失敗する。
// Approach
開発者は、
Intl.NumberFormat を用いて通貨メタデータを動的に取得する設計を採用した。- ・
resolvedOptions().maximumFractionDigitsを使い、通貨コードから適切な桁数を動的に取得する。 - ・ロケールを
en-US等に明示的に指定することで、実行環境に左右されない表示の決定性を確保する。 - ・
try-catchで形式不正な通貨コードによるRangeErrorを捕捉し、安全にフォールバックする。
// Result
開発者は、ハードコードによるメンテナンスコストを排除し、正確な表示を実現した。
- ・通貨リストの管理が不要になり、将来的な通貨仕様の改定にも自動で対応可能となった。
- ・ロケールを固定したことで、ローカル環境とCI環境における表示の不一致を解消した。
- ・不正な入力に対しても、表示関数が例外を投げず、画面全体をクラッシュさせない堅牢性を獲得した。
Senior Engineer Insight
> 本記事は、標準APIの「隠れた機能」を実戦的に活用した良質な事例である。特に
resolvedOptions() によるメタデータ取得は、自前でマスタを持つリスクを回避する優れた判断だ。ただし、Intl が「形式」のみを検証し「実在性」を保証しない点には注意が必要である。実務では、バリデーション層と表示層の責務を明確に分けるべきだ。