##
6.3.2 Decimal objects

class `Decimal`( | [value [, context]])

  Constructs a new `Decimal` object based from value.

  value can be an integer, string, tuple, or another `Decimal` object. If no value is given, returns `Decimal("0")`. If value is a string, it should conform to the decimal numeric string syntax:

          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

  If value is a `tuple`, it should have three components, a sign (`0` for positive or `1` for negative), a `tuple` of digits, and an integer exponent. For example, "`Decimal((0, (1, 4, 1, 4), -3))`" returns `Decimal("1.414")`.

  The context precision does not affect how many digits are stored. That is determined exclusively by the number of digits in value. For example, "`Decimal("3.00000")`" records all five zeroes even if the context precision is only three.

  The purpose of the context argument is determining what to do if value is a malformed string. If the context traps `InvalidOperation`, an exception is raised; otherwise, the constructor returns a new Decimal with the value of `NaN`.

  Once constructed, `Decimal` objects are immutable.

Decimal floating point objects share many properties with the other builtin numeric types such as `float` and `int`. All of the usual math operations and special methods apply. Likewise, decimal objects can be copied, pickled, printed, used as dictionary keys, used as set elements, compared, sorted, and coerced to another type (such as `float` or `long`).

In addition to the standard numeric properties, decimal floating point objects also have a number of specialized methods:

`adjusted`( | )

  Return the adjusted exponent after shifting out the coefficient's rightmost digits until only the lead digit remains: `Decimal("321e+5").adjusted()` returns seven. Used for determining the position of the most significant digit with respect to the decimal point.

`as_tuple`( | )

  Returns a tuple representation of the number: "`(sign, digittuple, exponent)`".

`compare`( | other[, context])

  Compares like `__cmp__()` but returns a decimal instance:

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

`max`( | other[, context])

  Like "`max(self, other)`" except that the context rounding rule is applied before returning and that `NaN` values are either signalled or ignored (depending on the context and whether they are signaling or quiet).

`min`( | other[, context])

  Like "`min(self, other)`" except that the context rounding rule is applied before returning and that `NaN` values are either signalled or ignored (depending on the context and whether they are signaling or quiet).

`normalize`( | [context])

  Normalize the number by stripping the rightmost trailing zeroes and converting any result equal to `Decimal("0")` to `Decimal("0e0")`. Used for producing canonical values for members of an equivalence class. For example, `Decimal("32.100")` and `Decimal("0.321000e+2")` both normalize to the equivalent value `Decimal("32.1")`.

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

  Quantize makes the exponent the same as exp. Searches for a rounding method in rounding, then in context, and then in the current context.

  If watchexp is set (default), then an error is returned whenever the resulting exponent is greater than `Emax` or less than `Etiny`.

`remainder_near`( | other[, context])

  Computes the modulo as either a positive or negative value depending on which is closest to zero. For instance, "`Decimal(10).remainder_near(6)`" returns `Decimal("-2")` which is closer to zero than `Decimal("4")`.

  If both are equally close, the one chosen will have the same sign as self.

`same_quantum`( | other[, context])

  Test whether self and other have the same exponent or whether both are `NaN`.

`sqrt`( | [context])

  Return the square root to full precision.

`to_eng_string`( | [context])

  Convert to an engineering-type string.

  Engineering notation has an exponent which is a multiple of 3, so there are up to 3 digits left of the decimal place. For example, converts `Decimal('123E+1')` to `Decimal("1.23E+3")`

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

  Rounds to the nearest integer without signaling `Inexact` or `Rounded`. If given, applies rounding; otherwise, uses the rounding method in either the supplied context or the current context.