8.2. Monetary Types
type stores a currency amount with a fixed
fractional precision; see
. The fractional precision is
determined by the database's
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
Output is generally in the latter form but depends on the locale.
Table 8.3. Monetary Types
||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
data into a database that has a different
. To avoid problems, before
restoring a dump into a new database make sure
the same or equivalent value as in the database that was dumped.
Values of the
data types can be cast to
Conversion from the
data types can be done by casting to
However, this is not recommended. Floating point numbers should not be used to handle money due to the potential for rounding errors.
value can be cast to
loss of precision. Conversion to other types could potentially lose
precision, and must also be done in two stages:
Division of a
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
before dividing and back to
afterwards. (The latter is preferable to avoid risking precision loss.)
value is divided by another
value, the result is
(i.e., a pure number,
not money); the currency units cancel each other out in the division.