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


322

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

  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

回答:


500
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小数点以下の桁数です。

12
つまり、4fは小数を4に制限すること(後続ゼロを含む)を表すことを理解していますが、10はどういう意味ですか?これは、このフォーマットが9999999999(10の9)より大きい整数では機能しないことを意味しますか?ちょっと興味があるんだけど。
hobbes3 2012年

55
10.4幅が10文字、精度が小数点以下4桁であることを意味します。
MRAB 2012年

13
@ hobbes3:10は、最小フィールド幅、つまり印刷される文字列の最小長です。数値はデフォルトで右揃えされ、スペースが埋め込まれます。詳細については、ドキュメントをご覧ください。
Sven Marnach

9
2.7より前のPythonの場合:("%0.4f" % x).rjust(10)
Steven Rumbalski 2012年

22
@StevenRumbalski:または単に"%10.4f" % x。Python 2.6では、も使用できます"{0:10.4f}".format(x)
Sven Marnach

88

これが回答されてから数年が経ちましたが、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

2
幅にはドット文字も含まれることに注意してください。したがって、幅に9を指定すると、1はドットの印刷に使用され、残りの8は数字とスペースの印刷に使用されます。
off99555

37

python3では、次の作品:

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

これは過去4年間で変更され、現在%フォーマットは最も古いフォーマット方法です。いくつかの理由により、str.formatまたはを使用することf-stringsが推奨され%ます。以前はそれだけだったときstr.format、人々にはいくつかの理由がありましたが、f-stringsその穴を修正しました。フォーマットミニ言語ドキュメントドキュメントからstr.format例ドキュメント中のF-文字列リテラル例
ninMonkey


6

ゼロを埋めることもできます。たとえば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、...

したがって、ファイル名に必要な数値順序を適用したい場合は、適切な数のゼロを左側に埋め込む必要があります。


2

Python 3。

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

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


0

配列についても同様のものが必要でした。それは私を助けました

some_array_rounded=np.around(some_array, 5)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.