8.2. Monetary Types
  The
  
   money
  
  type stores a currency amount with a fixed
    fractional precision; see
  
   Table 8.3
  
  .  The fractional precision is
    determined by the database's
  
   lc_monetary
  
  setting.
    The range shown in the table assumes there are two fractional digits.
    Input is accepted in a variety of formats, including integer and
    floating-point literals, as well as typical
    currency formatting, such as
  
   '$1,000.00'
  
  .
    Output is generally in the latter form but depends on the locale.
 
Table 8.3. Monetary Types
| Name | Storage Size | Description | Range | 
|---|---|---|---|
| 
        money
        | 8 bytes | currency amount | -92233720368547758.08 to +92233720368547758.07 | 
  Since the output of this data type is locale-sensitive, it might not
    work to load
  
   money
  
  data into a database that has a different
    setting of
  
   lc_monetary
  
  .  To avoid problems, before
    restoring a dump into a new database make sure
  
   lc_monetary
  
  has
    the same or equivalent value as in the database that was dumped.
 
  Values of the
  
   numeric
  
  ,
  
   int
  
  , and
  
   bigint
  
  data types can be cast to
  
   money
  
  .
    Conversion from the
  
   real
  
  and
  
   double precision
  
  data types can be done by casting to
  
   numeric
  
  first, for
    example:
 
SELECT '12.34'::float8::numeric::money;
However, this is not recommended. Floating point numbers should not be used to handle money due to the potential for rounding errors.
  A
  
   money
  
  value can be cast to
  
   numeric
  
  without
    loss of precision. Conversion to other types could potentially lose
    precision, and must also be done in two stages:
 
SELECT '52093.89'::money::numeric::float8;
  Division of a
  
   money
  
  value by an integer value is performed
    with truncation of the fractional part towards zero.  To get a rounded
    result, divide by a floating-point value, or cast the
  
   money
  
  value to
  
   numeric
  
  before dividing and back to
  
   money
  
  afterwards.  (The latter is preferable to avoid risking precision loss.)
    When a
  
   money
  
  value is divided by another
  
   money
  
  value, the result is
  
   double precision
  
  (i.e., a pure number,
    not money); the currency units cancel each other out in the division.