1. ホーム
  2. パイソン

[解決済み】小数を常に小数点以下2桁で表示させる書式は?

2022-04-16 09:39:02

質問

表示させたい。

49 として 49.00

とします。

54.9 として 54.90

小数点以下の長さや、小数点以下の桁数に関係なく、「1」「2」「3」「4」「5」を表示したい。 Decimal を小数点以下2桁で表示し、効率的に行いたい。目的は、お金の値を表示することです。

例えば 4898489.00

どのように解決するのですか?

おそらく、あなたは Decimal() オブジェクトを decimal モジュールですか?(任意に大きな数値で小数点以下2桁の精度が正確に必要なら、間違いなくそうすべきですし、ご質問のタイトルもそうなっています...)

もしそうなら 10進法FAQ のセクションに質問と回答のペアがあり、これが役に立つかもしれません。

<ブロッククオート

Q. 小数点以下2桁の固定小数点アプリケーションにおいて、入力の中には桁数が多く、丸めなければならないものがあります。また、桁数が多いことが想定されていないものもあり、バリデーションが必要です。どのような方法を用いるべきでしょうか?

A. quantize()メソッドは、小数点以下の桁数を固定して丸めるものです。Inexactトラップが設定されている場合、検証にも有効です。

>>> 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桁、右から2桁、それ以上は必要ないという意味です)で文字列に変換すると str は問題なく動作します。

str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'