web-dev-qa-db-ja.com

Pythonで浮動小数点数を固定幅にフォーマットする方法

次の要件を満たして、浮動小数点数を固定幅にフォーマットするにはどうすればよいですか。

  1. N <1の場合、先頭にゼロが付きます。
  2. 固定幅を埋めるために末尾の10進数のゼロを追加
  3. 固定幅を超えた小数桁数を切り捨て
  4. すべての小数点を揃える

例えば:

% formatter something like '{:06}'
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print formatter.format(number)

出力は以下のようになります

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
247
hobbes3
for x in numbers:
    print "{:10.4f}".format(x)

版画

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

中括弧内のフォーマット指定子は Pythonフォーマット文字列構文 に従います。具体的には、この場合、次の部分から構成されています。

  • コロンの前の 空の文字列 は、「次に指定された引数をformat()に渡す」という意味です。この場合、xが唯一の引数として扱われます。
  • コロンの後の10.4f部分は フォーマット指定 です。
  • fは固定小数点表記を表します。
  • 10は、スペースで左にパディングされた、印刷されるフィールドの合計幅です。
  • 4は、小数点以下の桁数です。
397
Sven Marnach

これが回答されてから数年が経ちましたが、Python 3.6( PEP498 )からは新しいf-stringsを使うことができます。

numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print(f'{number:9.4f}')

印刷:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
33
artomason

Python3では、次のように動作します。

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4
31
Scott Roberts

Python 3.x フォーマット文字列構文を参照してください

IDLE 3.5.1   
numbers = ['23.23', '.1233', '1', '4.223', '9887.2']

for x in numbers:  
    print('{0: >#016.4f}'. format(float(x)))  

     23.2300
      0.1233
      1.0000
      4.2230
   9887.2000
7
readyleader

ゼロでパッドを残すこともできます。たとえば、numberの長さを9文字にしたい場合は、左にゼロを埋めて以下を使用します。

print('{:09.3f}'.format(number))

したがって、number = 4.656の場合、出力は00004.656です。

例では、出力は次のようになります。

numbers  = [23.2300, 0.1233, 1.0000, 4.2230, 9887.2000]
for x in numbers: 
    print('{:010.4f}'.format(x))

プリント:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

これが役立つ場合の1つの例は、ファイル名をアルファベット順に適切にリストする場合です。一部のLinuxシステムでは、番号が1,10,11、... 2,20,21、...であることに気付きました。

したがって、ファイル名に必要な数字の順序を適用する場合は、適切な数のゼロを左詰めする必要があります。

1
elcymon

Pythonで3。

GPA = 2.5
print(" %6.1f " % GPA)

6.1fは、ドットの後に1桁が表示されることを意味します。ドットの後に2桁を印刷する場合は、%6.2fが3桁になるように%6.3fするだけです。

0
Usman Zia