練習問題集: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文字列は「文脈に埋め込む」ために使うのが基本。
- テスト: 想定ロケールを固定し、出力例を文字列比較するユニットテストが書きやすい。


