##
2 Decimal オブジェクト

クラス `Decimal`( | [value [, context]])

  value に基づいて新たな `Decimal` オブジェクトを構築 します。

  value は整数、文字列、タプル、および他の `Decimal` オブジェクトにできます。value を指定しない場合、 `Decimal("0")` を返します。 value が文字列の場合、 以下の 10 進数文字列の文法に従わねばなりません:

          sign           ::=  '+' | '-'
          digit          ::=  '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
          indicator      ::=  'e' | 'E'
          digits         ::=  digit [digit]...
          decimal-part   ::=  digits '.' [digits] | ['.'] digits
          exponent-part  ::=  indicator [sign] digits
          infinity       ::=  'Infinity' | 'Inf'
          nan            ::=  'NaN' [digits] | 'sNaN' [digits]
          numeric-value  ::=  decimal-part [exponent-part] | infinity
          numeric-string ::=  [sign] numeric-value | [sign] nan

  value を `tuple` にする場合、タプルは三つの要素を持ち、 それぞれ符号 (正なら`0`、負なら `1`)、仮数部を 表す数字のタプル、そして指数を表す整数でなければなりません。 例えば、"`Decimal((0, (1, 4, 1, 4), -3))`" は `Decimal("1.414")` を返します。

  context に指定した精度 (precision) は、オブジェクトが記憶する 桁数には影響しません。桁数は value に指定した桁数だけから 決定されます。例えば、演算コンテキストに指定された精度が 3 桁しかなくても、 "`Decimal("3.00000")`" は 5 つのゼロを全て記憶します。

  context 引数の目的は、value が正しくない形式の文字列 であった場合に行う処理を決めることにあります; 演算コンテキストが`InvalidOperation` をトラップするように なっていれば、例外を送出します。それ以外の場合には、コンストラクタは 値が`NaN` の`Decimal` を返します。

  一度生成すると、`Decimal` オブジェクトは変更不能 (immutable) になります。

10 進浮動小数点オブジェクトは、`float` や`int` のような 他の組み込み型と多くの点で似ています。通常の数学演算や特殊メソッドを 適用できます。また、`Decimal` オブジェクトは コピーでき、pickle 化でき、print で出力でき、辞書のキーにでき、 集合の要素にでき、比較、保存、他の型 (`float` や`long`) への型強制を行えます。

こうした標準的な数値型の特性の他に、10進浮動小数点オブジェクトには 様々な特殊メソッドがあります:

`adjusted`( | )

  仮数部の先頭の一桁だけが残るように桁シフトを行い、そのときの指数部を 返します: `Decimal("321e+5").adjusted()` なら 7 です。 最上桁の小数点からの相対位置を調べる際に使います。

`as_tuple`( | )

  数値を表現するためのタプル: "`(sign, digittuple, exponent)`"を返します。

`compare`( | other[, context])

  `__cmp__()` に似ていますが、`Decimal` インスタンスを 返します。

              a or b is a NaN ==> Decimal("NaN")
              a < b           ==> Decimal("-1")
              a == b          ==> Decimal("0")
              a > b           ==> Decimal("1")

`max`( | other[, context])

  "`max(self, other)`" と同じですが、値を返す前に現在のコンテキストに 即した丸め規則を適用します。また、 `NaN` に対して、(コンテキストでシグナルまたは黙認のどちらが 設定されているかに応じて) シグナルを発行するか無視します。

`min`( | other[, context])

  "`min(self, other)`" と同じですが、値を返す前に現在のコンテキストに 即した丸め規則を適用します。また、 `NaN` に対して、(コンテキストでシグナルまたは黙認のどちらが 設定されているかに応じて) シグナルを発行するか無視します。

`normalize`( | [context])

  数値を正規化 (normalize) して、右端に連続しているゼロを除去し、 `Decimal("0")` と同じ結果はすべて `Decimal("0e0")` に変換します。 同じクラスの値から基準表現を生成する際に用います。 たとえば、 `Decimal("32.100")` と `Decimal("0.321000e+2")` の正規化は、いずれも同じ値 `Decimal("32.1")` になります。

`quantize`( | exp [, rounding[, context[, watchexp]]])

  指数部をexp と同じにします。値丸めの際、まずrounding が あるか調べ、次にcontext を調べ、最後に現在のコンテキストの 設定を用います。

  watchexp が (default) に設定されている場合、処理結果の指数 が `Emax` よりも大きい場合や `Etiny` よりも小さい 場合にエラーを返します。

`remainder_near`( | other[, context])

  モジュロを計算し、正負のモジュロのうちゼロに近い値を返します。 たとえば、 "`Decimal(10).remainder_near(6)`" は `Decimal("4")` よりもゼロに近い値 `Decimal("-2")` を返します。

  ゼロからの差が同じ場合には、 self と同じ符号を持った方を 返します。

`same_quantum`( | other[, context])

  self と other が同じ指数を持っているか、あるいは 双方とも `NaN` である場合に真を返します。

`sqrt`( | [context])

  平方根を精度いっぱいまで求めます。

`to_eng_string`( | [context])

  数値を工学で用いられる形式 (工学表記; enginnering notation) の文字列に変換します。

  工学表記では指数は 3 の倍数になります。従って、 最大で 3 桁までの数字が基数の小数部に現れます。たとえば、 `Decimal('123E+1')` は `Decimal("1.23E+3")` に変換されます。

`to_integral`( | [rounding[, context]])

  `Inexact` や `Rounded` といったシグナルを出さずに 最近傍の整数に値を丸めます。rounding が指定されていれば適用 されます; それ以外の場合、値丸めの方法はcontext の設定か現在の コンテキストの設定になります。