货币类型

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 8. 数据类型 | 下一页

# 8.2. 货币类型

`money`类型存储带有固定小数精度的货币金额，可查阅 表 8-3。小数精度由lc_monetary 的设置来决定。表格中显示的范围假设有两位小数。可以以任意格式输入，包括整型， 浮点型，或者典型的货币格式，如`'$1,000.00'`。 根据区域字符集，输出一般是最后一种形式。

表 8-3. 货币类型

名字 | 存储容量 | 描述 | 范围
--- | --- | --- | ---
money | 8 字节 | 货币金额 | -92233720368547758.08 到 +92233720368547758.07

由于输出的数据类型对语言环境要求很细，因此，`lc_monetary` 设置的不同可能会造成无法将`money`数据输入到数据库中。 为了避免这种问题的发生，在向一个新数据库进行转储之前，确保 `lc_monetary`与原数据库相同，或具有等价值。

`numeric`, `int`和`bigint`数据类型的值可以转化为 `money`类型。从`real`和`double precision` 数据类型的转换可以通过先转化为`numeric`类型，例如：

    SELECT '12.34'::float8::numeric::money;

然而，这是不被建议的。浮点数不应该用来处理货币类型，因为潜在的圆整可能导致错误。

`money`值可以被转换为`numeric`而不丢失精度。 转换为其他类型可能丢失精度，并且必须通过两步来完成：

    SELECT '52093.89'::money::numeric::float8;

当一个`money`值被另一个`money`值除时， 结果是`double precision`（也就是，一个纯数字，而不是money）； 在结果中货币单位相互取消。

上一页 | 起始页 | 下一页
数值类型 | 上一级 | 字符类型