表示したい:
49
を49.00
として
そして:
54.9
を54.90
として
小数点以下の桁数や小数点以下の桁数があるかどうかにかかわらず、小数点以下2桁のDecimal
を表示したいのですが、それを効率的な方法で行いたいのです。目的は金額を表示することです。
例:4898489.00
おそらく、 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'
値の表現方法を定義するには、 新しいフォーマット仕様 を使用してください。
>>> from math import pi # pi ~ 3.141592653589793
>>> '{0:.2f}'.format(pi)
'3.14'
ドキュメントは少し曖昧になることがあるので、以下の読みやすい参照をお勧めします。
.format()
文字列フォーマット%
の文字列フォーマットと新しいスタイルの .format()
文字列フォーマットを比較しますPython 3.6では リテラル文字列補間 (f文字列としても知られています)が導入されたので、今度は上記をさらに簡潔に書くことができます。
>>> f'{pi:.2f}'
'3.14'
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'
文字列フォーマット演算子 をそのまま使うことができます。
num = 49
x = "%.2f" % num # x is now the string "49.00"
私があなたが「効率的」とはどういう意味かわからない - これはほぼ間違いなくあなたのアプリケーションのボトルネックではない。プログラムの実行速度が遅い場合は、まずプロファイルを作成してホットスポットを見つけ、次にそれらを最適化します。
>>> print "{:.2f}".format(1.123456)
1.12
2
の2f
は、表示したい任意の数の小数点に変更できます。
Python3.6
から、これは次のように変換されます。
>>> print(f"{1.1234:.2f}")
1.12
.formatは変数のフォーマットを扱うためのより読みやすい方法です:
'{:.{prec}f}'.format(26.034, prec=2)
Python 3では、これを行う方法は次のようになります。
'{0:.2f}'.format(number)
複数のパラメータがある場合は使用できます
print('some string {0:.2f} & {1:.2f}'.format(1.1234,2.345))
>>> some string 1.12 & 2.35