home changes contents help options

172:数値をフォーマットする

数値をフォーマットするにはフォーマット文字列を用意し、それに対して数値で % 演算 を行います。

桁をそろえる

Ruby における sprintf メソッドの使い方と似ています。整数を整形する場合は %d を使います。 %3d などと間に数字が入った場合は、少なくともその桁分の文字列を作ります。また %08d 、$.8d と指定した場合に、指定した桁数に足りない部分が 0 で埋められる点もそっくりです。

'%d' % 100      # '100'
'%8d' % 100     # '     100'
'%-8d' % 100    # '100     '
'%08d' % 100    # '00000100'
'%08d' % -100   # '-0000100'
'%.8d' % 100    # '00000100'
'%10.8d' % 100  # '  00000100'
'%-10.8d' % 100 # '00000100  '

符号を常につける

正の数にも符号をつけるようにするには %+d を用います。また + 符号ではなくスペースを出力したい場合は % d をつかいます。

'%+d' % 100  # '+100'
'% d' % 100  # ' 100'
'%+d' % -100 # '-100'
'% d' % -100 # '-100'

進数表記を変える

整数を 16, 8進数表記にする場合はそれぞれ %x, %o を用います。

'%x' % 100 # '64'
'%o' % 100 # '144'

Ruby の場合と異なり負の値は補数表現となりませんので注意してください。

'%x' % -100 # '-64'

Ruby では 16, 8 進数リテラル表記にするための %#x, %#o が存在しますが Python にはありません。変わりに関数、 hex, oct が存在しますのでこちらを使ってください。

hex(100) # '0x64'
oct(100) # '0144'

浮動小数点数を整形する

こちらも Ruby の sprintf と似ています。浮動小数点数をフォーマットする場合は %f を使い、 %10.2 のように全体の桁数、小数部分の桁数を指定できます。また、 %e で指数表現、 %g で指数部が -4 以上または精度以下の場合だけ指数表現となります

Python 3.0 での変更点

Python3.0 では % 演算が非推奨、将来削除予定となり、変わりに str.format メソッドが追加されました。また、 2 進数リテラル表記の追加に伴って、数値を 2 進数リテラル表記に変換する bin 関数が追加されています。