初心者データサイエンティストの備忘録

調べたことは全部ここに書いて自分の辞書を作る

【Python】f文字列の書式指定でハマった

はじめに

 Pythonのf文字列の書式指定でハマったので、記録しておきます。

ハマったこと

 下記のコードでprintしたときに、想定と異なる挙動をしました。

print(f"{0.123456789: <010f}")
# ->「0.123457」 と表示された

 書式指定が<010fなので、左詰め・桁数の不足分は0埋め・全体で10桁(小数点も1桁とカウント)・小数点の有効数字6桁の0.12345700と表示されると思っていました(図1)。しかし、実際は0.123457と表示されてしまいました。

図1:書式指定の読み方

想定と異なる挙動をした理由

 理由はシンプルで、:<010fの間に半角スペースが含まれていたためです。下記のように、半角スペースを除くと想定した挙動になりました。

print(f"{0.123456789:<010f}")
# ->「0.12345700」 と表示された

 半角スペースが含まれると想定した挙動にならない理由まではわかりませんでした。しかし、半角スペースを除くと想定した挙動になったので、とりあえず良しとしています。