1
1

More than 3 years have passed since last update.

Pythonで、小数点以下の表示桁数を固定した上で右寄せにしたい場合

Last updated at Posted at 2021-03-16

 以下のようなプログラムを書いたとする。

import numpy as np

for i in np.arange(8,12,0.25):
    print(f'ただいまの気温は {i} 度です')

 結果は以下の通り。

ただいまの気温は 9.0 度です
ただいまの気温は 9.25 度です
ただいまの気温は 9.5 度です
ただいまの気温は 9.75 度です
ただいまの気温は 10.0 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.5 度です
ただいまの気温は 10.75 度です

 数字の位置が不揃いでぱっと見の大小関係が比較しづらい。これを直したい。

rjust

 Pythonにはこのような要望に答えるためにrjustというメソッドがある。自動的に数字を右寄せにしてくれるのだ。しかし、これだけでは上手くいかない。

for i in np.arange(9,11,0.25):
    print(f'ただいまの気温は {str(i).rjust(5)} 度です')
ただいまの気温は   9.0 度です
ただいまの気温は  9.25 度です
ただいまの気温は   9.5 度です
ただいまの気温は  9.75 度です
ただいまの気温は  10.0 度です
ただいまの気温は 10.25 度です
ただいまの気温は  10.5 度です
ただいまの気温は 10.75 度です

 確かに右寄せにはなっているが、小数点の位置がバラバラなのだ。これは、floatが小数点以下に0があった時には省略するという仕様があるためである。場合によってはありがたいが、今回はあまりありがたくない。小数点以下の表示が同じでないと、ぱっと見の大小関係が比較しづらい。

format

 Pythonにはこのような要望に答えるためにformatという機能がある。{}の表記を{:.2f}とすれば、小数点以下の表示を2桁に固定してくれる。

for i in np.arange(9,11,0.25):
    print(f'ただいまの気温は {i:.2f} 度です')
ただいまの気温は 9.00 度です
ただいまの気温は 9.25 度です
ただいまの気温は 9.50 度です
ただいまの気温は 9.75 度です
ただいまの気温は 10.00 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.50 度です
ただいまの気温は 10.75 度です

 しかしこれでも微妙に上手くいっていない。整数部分の桁数が違う場合、左寄せになってしまうのだ。

幅指定(追記)

 コメントで教えていただいた。こんな便利な記法があったとは。


for i in np.arange(9,11,0.25):
    print(f'ただいまの気温は {i:5.2f} 度です')
ただいまの気温は  9.00 度です
ただいまの気温は  9.25 度です
ただいまの気温は  9.50 度です
ただいまの気温は  9.75 度です
ただいまの気温は 10.00 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.50 度です
ただいまの気温は 10.75 度です

複合技(追記前)

(※以下の記述は、上の「幅指定」を知る前に書いたものになります)

 要は

  • 小数点以下に0を含む
  • 整数部分の桁が揃っていない

 という場合は、どちらかを直すだけではダメなのである。これを適切に処理するためには、順を追って処理する必要がある。

for i in np.arange(9, 11, 0.25):
    formated_i = f'{i:.2f}'
    print(f'ただいまの気温は {str(formated_i).rjust(5)} 度です')
ただいまの気温は  9.00 度です
ただいまの気温は  9.25 度です
ただいまの気温は  9.50 度です
ただいまの気温は  9.75 度です
ただいまの気温は 10.00 度です
ただいまの気温は 10.25 度です
ただいまの気温は 10.50 度です
ただいまの気温は 10.75 度です

 微妙にめんどくさい。

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1