6.3.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

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

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

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

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

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

こうした標準的な数値型の特性の他に、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])
selfother が同じ指数を持っているか、あるいは 双方とも NaN である場合に真を返します。

sqrt( [context])
平方根を精度いっぱいまで求めます。

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

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

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

ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。