web-dev-qa-db-ja.com

新しいPython format関数で小数を丸める

Python 3.0 format関数を使用して小数を特定の小数点以下の桁数に丸めるにはどうすればよいですか?]

50
Casebash

以下は、典型的な便利な例です...:

>>> n = 4
>>> p = math.pi
>>> '{0:.{1}f}'.format(p, n)
'3.1416'

ネストされた{1}は、2番目の引数、nの現在値を取り、指定されたとおりに適用します(ここでは、形式の「精度」部分-小数点以下の桁数)、および結果の外部{0:.4f}が適用されます。もちろん、4(または任意の桁数)を希望する場合、ただし重要な点は、have to!

さらに良い...:

>>> '{number:.{digits}f}'.format(number=p, digits=n)
'3.1416'

...上記の0や1などの曖昧な「引数番号」の代わりに、shiny-clear引数namesを使用して、 keyword(別名「named」)引数として対応する値はformat-それはsoより読みやすいです!

86
Alex Martelli

Python 3.xでは、フォーマット文字列には中括弧で示される置換フィールドが含まれます。

".... {0: format_spec} ....".format(value)

形式仕様の一般的なレイアウトは次のとおりです。

[[fill]align][sign][pad][width][,][.precision][type]

したがって、たとえば、幅、精度、およびタイプコード以外のすべてを除外する場合、10進数または浮動小数点数は次のようにフォーマットできます。

>>>print("The value of pi is {0:10.7f} to 7 decimal places.".format(math.pi))

これは次のように印刷されます。

The value of pi is  3.1415927 to 7 decimal places.
16
Don O'Donnell

Xを小数点以下n桁に丸めるには、次を使用します。

"{0:.{1}f}".format(x,n)

0と1は、それぞれstr.format()メソッドの最初と2番目の引数を表します。

4
Casebash

[Alex Martelli]のソリューションに基づいて更新された回答ですが、Python 3.6.2を使用し、更新されたフォーマット構文を推奨します:

>>> n=4
>>> p=math.pi
>>> f'{p:.{n}f}'
'3.1416'

しかし、変数を賢く選択することにより、コードは自己文書化されます

>>> precision = 4
>>> pi = math.pi
>>> f'{pi:.{precision}f}'
'3.1416'
3
Wynn

{0}表記と{digits}表記の両方を組み合わせることができることがわかりました。これは、すべての変数を事前に指定された小数点以下の桁数に丸める場合に特に役立ちます1宣言

sName = 'Nander'
fFirstFloat = 1.12345
fSecondFloat = 2.34567
fThirdFloat = 34.5678
dNumDecimals = 2

print( '{0} found the following floats: {1:.{digits}f}, {2:.{digits}f}, {3:.{digits}f}'.format(sName, fFirstFloat, fSecondFloat, fThirdFloat, digits=dNumDecimals))
# Nander found the following floats: 1.12, 2.35, 34.57
1