Python | f文字列でのローカライズ(通貨記号や桁区切りのロケール対応)

Python Python
スポンサーリンク

練習問題集:f文字列+Babelで日本円と米ドルをローカライズ表示

Babelでロケールに沿った数値・通貨表示を作り、f文字列で見やすく埋め込む練習です。事前に「pip install Babel」を実行しておいてください。


基礎:小数と桁区切りのロケール表示

問題1

  • 目的: 日本ロケールで小数をローカライズ表示し、f文字列で文に埋め込む。
  • 指示: 数値 1234567.89 を ja_JP ロケールで小数として整形し、「合計金額は … です。」の文章に埋め込んで表示してください。
解答
from babel.numbers import format_decimal

value = 1234567.89
formatted = format_decimal(value, locale='ja_JP')
print(f"合計金額は {formatted} です。")
Python
解説
  • format_decimal: ロケールごとの桁区切り・小数点表記で数値を文字列化。
  • f文字列: 生成した文字列を自然な文に埋め込むのに適している。

通貨:日本円と米ドルの基本

問題2

  • 目的: 日本円と米ドルをそれぞれの適切なロケールで通貨表示。
  • 指示: 金額 value = 1234567.89 を、日本円は ja_JP、米ドルは en_US で表示し、2行で出力してください。
解答
from babel.numbers import format_currency

value = 1234567.89
jpy = format_currency(value, 'JPY', locale='ja_JP')
usd = format_currency(value, 'USD', locale='en_US')

print(jpy)
print(usd)
Python
解説
  • format_currency: 通貨コードに応じた記号・桁・位置をロケール規則で整形。
  • ロケール: 日本円なら ja_JP、米ドルなら en_US を使うのが自然。

f文字列でレシート風に整形

問題3

  • 目的: 複数の値をf文字列で整え、見やすいレシート風表示にする。
  • 指示: subtotal = 1980, tax = 198, total = 2178 を日本円で整形し、次の形式で出力してください。
    「小計: ¥1,980」「税金: ¥198」「合計: ¥2,178」
解答
from babel.numbers import format_currency

subtotal = 1980
tax = 198
total = 2178

fs = format_currency(subtotal, 'JPY', locale='ja_JP')
ft = format_currency(tax, 'JPY', locale='ja_JP')
ftotal = format_currency(total, 'JPY', locale='ja_JP')

print(f"小計: {fs}")
print(f"税金: {ft}")
print(f"合計: {ftotal}")
Python
解説
  • 事前整形+f文字列: まず通貨表示を作り、その文字列をf文字列でラベル付きにする。

混在ロケールのレポート文

問題4

  • 目的: 1つの文で異なるロケールの通貨を並記する。
  • 指示: value = 54321.7 を日本円と米ドルで表示し、
    「日本円: … / 米ドル: …」の形式で1行出力してください。
解答
from babel.numbers import format_currency

value = 54321.7
jpy = format_currency(value, 'JPY', locale='ja_JP')
usd = format_currency(value, 'USD', locale='en_US')

print(f"日本円: {jpy} / 米ドル: {usd}")
Python
解説
  • f文字列の活用: 異なるロケールで整形した結果を1行でわかりやすく提示。

応用:小数桁の制御と丸め

問題5

  • 目的: 小数桁数の指定と通貨表示の違いを理解する。
  • 指示:value = 1234567.899
    • format_decimal で小数2桁("#,##0.00"パターン)、
    • format_currency で日本円(ja_JP)、 をそれぞれ整形し、2行で出力してください。どちらが丸められるか比較しましょう。
解答
from babel.numbers import format_decimal, format_currency

value = 1234567.899
dec2 = format_decimal(value, format="#,##0.00", locale='ja_JP')
jpy = format_currency(value, 'JPY', locale='ja_JP')

print(dec2)  # 例: 1,234,567.90
print(jpy)   # 例: ¥1,234,568
Python
解説
  • formatパターン: format_decimal は表示桁のパターン指定で丸めを制御。
  • 通貨の規則: format_currency は通貨ごとの標準丸めに従う(JPYは通常0小数、四捨五入)。

追加ヒント

  • 依存関係: Babelは外部ライブラリ。プロジェクトで使う場合は依存を明示する。
  • f文字列の役割: 数値の整形はBabelに任せ、f文字列は「文脈に埋め込む」ために使うのが基本。
  • テスト: 想定ロケールを固定し、出力例を文字列比較するユニットテストが書きやすい。

Python
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました