Python 逆引き集 | 文字列操作:桁数を指定して表示する

Python Python
スポンサーリンク
スポンサーリンク

Pythonで桁数を指定して表示する方法

Pythonを実務で使う際に、数値を「きれいに」表示したい場面は非常に多くあります。例えば、金額を3桁ごとにカンマで区切ったり、小数点以下を2桁に揃えて表示したり、日付の「月」や「日」を必ず2桁で表示したりするケースです。

この記事では、Pythonで桁数を指定して表示するための代表的な3つの方法を、初心者の方でも実務で即戦力となるよう、丁寧に解説していきます。

なぜ「桁数指定」が重要なのか

まず、なぜこの操作が重要なのか、具体例を見てみましょう。

たとえば、ECサイトの注文一覧を作成するとき、以下のような表示が求められることがあります。

  • 商品価格:1,980円(3桁ごとにカンマ)
  • 消費税:158.40円(小数点以下2桁)
  • 注文日:2026/10/09(月と日を2桁で揃える)

このように、「人間が見やすい形式」に整えることは、プログラミングの基本中の基本です。見た目が整っていないと、データの信頼性自体も疑われてしまいます。

方法1:f-string(フォーマット文字列)を使う【現代の標準】

現在のPython(3.6以降)では、f-stringが最も推奨される方法です。シンプルで直感的に書け、処理速度も速いため、実務ではこちらが主流になっています。

基本的な書き方

f-stringは、文字列の前にfを付け、中括弧{}の中に変数や式を埋め込む形式です。

# 基本的なf-stringの使い方
name = "田中"
age = 30

print(f"こんにちは、{name}さん。あなたは{age}歳です。")
# 出力:こんにちは、田中さん。あなたは30歳です。
Python

① 整数の桁数を指定する(ゼロ埋め)

整数を「必ず5桁で表示したい」場合、:05dという書き方をします。dは10進数(decimal)を意味し、05は「5桁に足りない分を0で埋める」という指示です。

# ゼロ埋めで桁数を揃える例
student_id = 42

print(f"学籍番号:{student_id:05d}")
# 出力:学籍番号:00042

# 実務例:日付の「月」を2桁で表示
month = 7
print(f"2026年{month:02d}月")
# 出力:2026年07月月 → 「07月」と2桁で表示される
Python

重要ポイント:
ゼロ埋めは、ファイル名の連番やIDの整形で頻繁に使われます。001, 002…のように並ぶことで、後でファイルをソート(並び替え)したときに正しい順序になります。

② 小数点以下の桁数を指定する

小数を「小数点以下2桁で表示したい」場合、:.2fと書きます。fは浮動小数点数(float)を意味し、.2は「小数点以下2桁」という指定です。

# 小数点以下の桁数指定
price = 1980
tax_rate = 0.10

tax = price * tax_rate  # 198.0

print(f"本体価格:{price}円")
print(f"消費税:{tax:.2f}円")  # 小数点以下2桁で表示
print(f"合計:{price + tax:.2f}円")

# 出力結果:
# 本体価格:1980円
# 消費税:198.00円
# 合計:2178.00円
Python

注意すべき点:
.2fを使うと、四捨五入が自動的に行われます。ただし、計算の精度が重要な場合(金融系など)、浮動小数点数の誤差に注意が必要です。厳密な計算が必要な場合はdecimalモジュールの使用を検討してください。

③ 3桁ごとにカンマを入れる

金額表示で必須の「3桁カンマ区切り」は、:,dまたは:,.2fで実現できます。

# カンマ区切りの例
revenue = 12345678

print(f"売上:{revenue:,d}円")
# 出力:売上:12,345,678円

# 小数点以下も指定する場合
pi = 3.1415926535
print(f"円周率:{pi:,.2f}")
# 出力:円周率:3.14
Python

④ 文字列の表示幅を揃える(左詰め・中央揃え・右詰め)

表形式のデータを表示する際、<(左詰め)、^(中央揃え)、>(右詰め)を使って見た目を整えられます。

# 表形式でデータを整列させる例
products = [
    ("りんご", 120, 30),
    ("バナナ", 80, 50),
    ("メロン", 2000, 5)
]

print(f"{'商品名':<10}{'単価':>8}{'在庫':>6}")
print("-" * 24)  # 区切り線

for name, price, stock in products:
    print(f"{name:<10}{price:>8,}{stock:>6}")

# 出力結果:
# 商品名        単価    在庫
# ------------------------
# りんご          120    30
# バナナ           80    50
# メロン        2,000     5
Python

実務での活用:
ログファイルの出力や、CLI(コマンドライン)ツールの結果表示でよく使われます。特に、>(右詰め)は数値の桁を揃えるのに有効です。

方法2:format()メソッドを使う【旧式だが現役】

f-stringが登場する前のPython(3.5以前)では、str.format()メソッドが主流でした。今でも既存のコード(レガシーコード)で多く見かけるため、理解しておくことは重要です。

基本的な書き方

文字列の中に{}(プレースホルダー)を置き、後ろに.format()で値を渡します。

# format()メソッドの基本形
name = "佐藤"
score = 85.567

print("名前:{}、スコア:{:.1f}".format(name, score))
# 出力:名前:佐藤、スコア:85.6

# インデックスで順番を指定することも可能
print("1位:{0}、2位:{1}、再び1位:{0}".format("Aさん", "Bさん"))
# 出力:1位:Aさん、2位:Bさん、再び1位:Aさん
Python

f-stringとの違いと使い分け

format()メソッドは、f-stringとほぼ同じ書式指定ができますが、「文字列を先に定義して、後から値を埋め込む」という点が異なります。

# テンプレート文字列として定義しておく(実務でよくあるパターン)
EMAIL_TEMPLATE = """
{name}様

この度はお問い合わせありがとうございます。
ご注文番号:{order_id:08d}
合計金額:{total:,}円

今後ともよろしくお願いいたします。
"""

# 後からデータを埋め込んで生成
email_body = EMAIL_TEMPLATE.format(
    name="山田太郎",
    order_id=12345,
    total=15800
)
print(email_body)
Python

重要ポイント:
f-stringはPython 3.6以降でしか使えません。もし、古いシステム(Python 2.7や3.5以前)を保守する可能性がある場合は、format()メソッドを覚えておく必要があります。

方法3:%演算子(旧式の書き方)【レガシー対応用】

さらに古いPython(2.x系)では、%演算子を使った書式指定が使われていました。現在は非推奨ですが、非常に古いコードを読む際に遭遇するため、概要だけは押さえておきましょう。

基本的な書き方

# %演算子を使った旧式の書き方(非推奨)
name = "鈴木"
height = 170.5

print("名前:%s、身長:%.1fcm" % (name, height))
# 出力:名前:鈴木、身長:170.5cm

# 整数は%d、文字列は%s、浮動小数点数は%fを使う
print("%d年%d月%d日" % (2026, 10, 9))
# 出力:2026年10月9日
Python

注意:
新規のコードでこの書き方を使うことは推奨されません。ただし、C言語やJavaのprintfの経験がある方には馴染みやすい書法です。

実務でよく使うテンプレート集

ここからは、実際の業務ですぐに使える具体的なテンプレートを紹介します。

テンプレート1:請求書風の金額表示

# 請求書などで使う金額の整形
items = [
    ("開発費", 500000),
    ("サーバー料金", 12000),
    ("サポート費", 8000)
]

total = 0
print("【請求明細】")
for item_name, amount in items:
    print(f"{item_name}:{amount:>10,}円")
    total += amount

print("-" * 25)
print(f"{'合計':<5}:{total:>10,}円")

# 出力結果:
# 【請求明細】
# 開発費:   500,000円
# サーバー料金:    12,000円
# サポート費:     8,000円
# -------------------------
# 合計  :   520,000円
Python

テンプレート2:日時の整形(ゼロ埋め)

# 日時をファイル名に使える形式に整形
from datetime import datetime

now = datetime.now()
timestamp = now.strftime("%Y%m%d_%H%M%S")  # 20261009_225430

# 手動で2桁に揃える場合(strftimeが使えない環境など)
year = now.year
month = now.month
day = now.day

filename = f"backup_{year}{month:02d}{day:02d}.zip"
print(filename)  # 出力例:backup_20261009.zip
Python

テンプレート3:進捗バーやパーセント表示

# 進捗率をパーセントで表示(小数点以下1桁)
current = 45
total = 120
progress = (current / total) * 100

print(f"進捗状況:{progress:.1f}% 完了 ({current}/{total})")
# 出力:進捗状況:37.5% 完了 (45/120)
Python

よくあるエラーとトラブルシューティング

初心者の方がつまずきやすいポイントを3つ挙げます。

1. 「ValueError: Unknown format code」が発生する

これは、データ型と書式指定が一致していない場合に発生します。例えば、文字列に対してd(整数用のコード)を使うとエラーになります。

# 間違った例:文字列に整数用の書式を適用
number_str = "123"
# print(f"{number_str:05d}")  # ValueErrorが発生!

# 正しい例:一度整数に変換してから書式指定
print(f"{int(number_str):05d}")  # 出力:00123
Python

2. カンマが付かない場合

:,dのようにdを付け忘れると、カンマが付きません。必ず,の後に型を示す文字(dやf)を入れてください。

value = 1000000
print(f"{value:,}")   # これでも動くが、明示的にdを付けるとより安全
print(f"{value:,d}")  # 推奨:1000000 → 1,000,000
Python

3. 全角文字の幅がずれる問題

日本語の全角文字(漢字やひらがな)は、半角英数字の2倍の幅を取ります。そのため、{:10}と指定しても、見た目の幅が10文字分にならないことがあります。

# 全角と半角が混在すると表がずれる例
data = [("apple", 100), ("りんご", 100), ("バナナ", 80)]

for name, price in data:
    print(f"{name:<10}{price:>5}円")

# 対処法:表示する際に全角を半角に置き換える、
# あるいは外部ライブラリ(prettytableなど)を使う
Python

まとめ:覚えておくべき3つの書式

実務では、以下の3パターンをまず覚えておけば、ほとんどの場面に対応できます。

  1. ゼロ埋め:{value:04d} → 0001, 0042, 1234
  2. 小数点以下n桁:{value:.2f} → 3.14, 100.00
  3. カンマ区切り:{value:,} → 1,000,000

これらを組み合わせることで、{value:>10,.2f}(右詰め10桁、カンマ区切り、小数点以下2桁)のような複雑な書式も自由自在に操れるようになります。

まずはf-stringで基本的な書式指定に慣れ、必要に応じてformat()メソッドや古い書式への対応力も身につけていきましょう。きれいな出力は、プログラムの品質を左右する重要なスキルです。

タイトルとURLをコピーしました