NAME
    Interchange6::Currency - Currency objects for Interchange 6

DESCRIPTION
    Extends CLDR::Number::Format::Currency with accurate calculation
    functions using Math::BigFloat.

    Many useful standard operators are overloaded and return currency
    objects if appropriate.

ATTRIBUTES
  value
    Value as simple decimal, e.g.: 3.45

    All values are coerced into Math::BigFloat.

  converter_class
    Defaults to Finance::Currency::Convert::WebserviceX.

    The class name which handles conversion to a new "currency_code".

    The converter class can be any class that supports the following method
    signature:

      sub convert {
          my ($self, $price, $from, $to) = @_;
 
          return $converted_price;
      };

  converter
    Vivified "converter_class".

METHODS
  BUILD
    Sets precision for automatic rounding of "value" to
    "maximum_fraction_digits" in CLDR::Number::Format::Currency.

  clone %new_attrs?
    Returns clone of the currency object possibly with new attribute values
    (if any are supplied).

  convert $new_corrency_code
    Convert to new currency using "converter".

    NOTE: If "/convert" is called in void context then the currency object
    is mutated in place. If called in list or scalar context then the
    original object is not modified and a new Interchange6::Currency object
    is returned instead.

  as_string
    Stringified formatted currency, e.g.: $3.45

  stringify
    Alias for "as_string".

  add $arg
    Add $arg to "value" in place.

  subtract $arg
    Subtract $arg from "value" in place.

  multiply $arg
    Multiply "value" by $arg in place.

  divide $arg
    Divide "value" by $arg in place.

  modulo $arg
    Return "value" "%" $arg as currency object.

  cmp_value $arg
    Equivalent to "value" "<=>" $arg.

  cmp $arg
    String comparison.

    Not always useful in itself since string comparison of stringified
    currency objects might not produce what you expect depending on locale
    and currency code.