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