web-dev-qa-db-ja.com

小数点以下2桁を常に表示するように小数点をフォーマットするにはどうすればよいですか。

表示したい:

4949.00として

そして:

54.954.90として

小数点以下の桁数や小数点以下の桁数があるかどうかにかかわらず、小数点以下2桁のDecimalを表示したいのですが、それを効率的な方法で行いたいのです。目的は金額を表示することです。

例:4898489.00

196
orokusaki

おそらく、 decimal モジュールの Decimal() オブジェクトを使っているのでしょうか。 (あなたが正確に小数点以下の桁数が2桁の精度を必要とするなら、あなたは間違いなくそうあるべきです、そしてそれはあなたの質問のタイトルが示唆しているものです...)

もしそうなら、ドキュメントの 10進FAQ セクションにはあなたに役立つかもしれない質問/回答のペアがあります:

Q.小数点以下2桁の固定小数点アプリケーションで、一部の入力に桁数が多く丸めが必要です。他の人は余分な数字を持っているとは思われず、検証する必要があります。どのような方法を使うべきですか?

A. quantize()メソッドは、固定小数点以下の桁数に丸めます。不正確トラップが設定されている場合は、検証にも役立ちます。

>>> TWOPLACES = Decimal(10) ** -2       # same as Decimal('0.01')
>>> # Round to two places
>>> Decimal('3.214').quantize(TWOPLACES)
Decimal('3.21')
>>> # Validate that a number does not exceed two places
>>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Decimal('3.21')
>>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Traceback (most recent call last):
   ...
Inexact: None

次の質問は読む

Q.有効な2か所の入力を取得したら、アプリケーション全体でその不変式をどのように維持しますか。

それに対する答えが(他の多くの役に立つ情報と共に)必要な場合は、 前述のドキュメントのセクション を参照してください。また、Decimalを小数点を超えた2桁の精度で保持する場合(すべての桁を小数点の左側に保持し、2桁を右側に保持するのに必要な精度とそれ以上ではありません)それからそれらをstrで文字列に変換してもうまくいきます。

str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'
96
Michał Marczyk

値の表現方法を定義するには、 新しいフォーマット仕様 を使用してください。

>>> from math import pi  # pi ~ 3.141592653589793
>>> '{0:.2f}'.format(pi)
'3.14'

ドキュメントは少し曖昧になることがあるので、以下の読みやすい参照をお勧めします。

Python 3.6では リテラル文字列補間 (f文字列としても知られています)が導入されたので、今度は上記をさらに簡潔に書くことができます。

>>> f'{pi:.2f}'
'3.14'
438
BioGeek

Pythonドキュメントの String Formatting Operations セクションには、あなたが探している答えが含まれています。要するに:

"%0.2f" % (num,)

いくつかの例:

>>> "%0.2f" % 10
'10.00'
>>> "%0.2f" % 1000
'1000.00'
>>> "%0.2f" % 10.1
'10.10'
>>> "%0.2f" % 10.120
'10.12'
>>> "%0.2f" % 10.126
'10.13'
132
Travis Bradshaw

文字列フォーマット演算子 をそのまま使うことができます。

num = 49
x = "%.2f" % num  # x is now the string "49.00"

私があなたが「効率的」とはどういう意味かわからない - これはほぼ間違いなくあなたのアプリケーションのボトルネックではない。プログラムの実行速度が遅い場合は、まずプロファイルを作成してホットスポットを見つけ、次にそれらを最適化します。

29
Adam Rosenfield
>>> print "{:.2f}".format(1.123456)
1.12

22fは、表示したい任意の数の小数点に変更できます。

編集:

Python3.6から、これは次のように変換されます。

>>> print(f"{1.1234:.2f}")
1.12
23
Aziz Alto

.formatは変数のフォーマットを扱うためのより読みやすい方法です:

'{:.{prec}f}'.format(26.034, prec=2)
19
Mayank Patel

Python 3では、これを行う方法は次のようになります。

'{0:.2f}'.format(number)
7
Devin Ersoy

複数のパラメータがある場合は使用できます

 print('some string {0:.2f} & {1:.2f}'.format(1.1234,2.345))
 >>> some string 1.12 & 2.35
6
sushmit