Документация по PostgreSQL 9.1.1 | ||||
---|---|---|---|---|
Prev | Fast Backward | Chapter 8. Типы данных | Fast Forward | Next |
Тип money хранит значения валюты с фиксированной дробной частью; см. Table 8-3. Точность дробной части определяется настройкой СУБД lc_monetary. Диапазон, описанный в таблице, говорит о двух дробных разрядах. Ввод значений допускается в нескольких разных форматах, включая целые числа и числа с плавающей точкой, также как и значения в типичном для валюты формате, такие как '$1,000.00'. Вывод значений обычно осуществляется в последней форме, но зависит от локали.
Table 8-3. Денежные типы
Имя | Размер хранения | Описание | Диапазон |
---|---|---|---|
money | 8 байт | значения валюты | -92233720368547758.08 to +92233720368547758.07 |
Поскольку вывод значений этого типа данных зависит от локали, загрузка данных типа money из одной в базу данных может не работать, если базы данных имеют разные настройки lc_monetary. Чтобы избежать проблем, перед восстановлением дампа в новую базу данных, убедитесь, что значение настроек 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 (т.е. просто число, не денежное значение); валютные единицы при делении компенсируют друг друга.