16

私は数え切れないほどの時間を調査、読み取り、テストに費やしてきましたが、最終的には Python の Decimal オブジェクトに最も基本的な概念である Decimal の出力を文字列にフォーマットするという概念が欠けていることに混乱し、がっかりしました。

次の値を持ついくつかの文字列または Decimal オブジェクトがあるとします。

   0.0008
  11.1111
 222.2222
3333.3333
1234.5678

目標は、単純に Decimal の精度を小数点以下 2 桁に設定することです。たとえば、、およびとして11.1111フォーマットされます。11.111234.56781234.57

次のようなコードを想定しています。

import decimal
decimals = [
  decimal.Decimal('0.0008'),
  decimal.Decimal('11.1111'),
  decimal.Decimal('222.2222'),
  decimal.Decimal('3333.3333'),
  decimal.Decimal('1234.5678'),
]
for dec in decimals:
  print dec.as_string(precision=2, rounding=ROUND_HALF_UP)

結果の出力は次のようになります。

0.00
11.11
222.22
3333.33
1234.57

明らかに、Decimal のコンテキストの精度を利用することはできません。これは、10 進数の精度だけでなく、TOTAL 桁数が考慮されるためです。

Decimal を float に変換してその値を出力することにも興味がありません。Decimal の背後にある完全な理由は、float での計算の保存と実行を避けるためです。

他にどのような解決策がありますか? スタック オーバーフローに関して他にも多くの同様の質問があることは理解していますが、問い合わせている根本的な問題を解決できるものはありません。

どうもありがとう!

4

2 に答える 2

28

文字列の書式設定またはformat()関数を使用するだけです:

>>> for dec in decimals:
...    print format(dec, '7.2f')
... 
   0.00
  11.11
 222.22
3333.33
1234.57

decimal.Decimalは floatと同じフォーマット仕様をサポートしているため、必要に応じて指数、固定小数点、一般、数値、またはパーセンテージのフォーマットを使用できます。

これは、小数をフォーマットするための公式で Pythonic な方法です。Decimalクラスは、そのようなフォーマットを効率的に処理するメソッドを実装します.__format__()

于 2013-02-25T20:56:38.543 に答える