В PostgreSQL для работы с числами с плавающей точкой и фиксированной точностью используются следующие типы данных:
-
decimal
(илиnumeric
):- Тип данных
decimal
(илиnumeric
) используется для хранения чисел с фиксированной точностью и масштабом. - Подходит для финансовых расчетов, где важна точность.
- Пример:
decimal(10, 2)
— число с 10 цифрами, из которых 2 после запятой. - Хранит точные значения, без потери точности.
- Тип данных
-
double precision
:- Тип данных
double precision
используется для хранения чисел с плавающей точкой двойной точности (64 бита). - Подходит для научных расчетов, где важна высокая производительность, но не критична точность.
- Может терять точность из-за особенностей хранения чисел с плавающей точкой.
- Тип данных
-
real
:- Тип данных
real
используется для хранения чисел с плавающей точкой одинарной точности (32 бита). - Меньше точность по сравнению с
double precision
, но занимает меньше места. - Также может терять точность.
- Тип данных
Сравнение:
Характеристика | decimal (или numeric ) |
double precision |
real |
---|---|---|---|
Точность | Фиксированная | Плавающая | Плавающая |
Размер | Переменный | 8 байт (64 бита) | 4 байт (32 бита) |
Применение | Финансовые расчеты | Научные расчеты | Научные расчеты |
Потеря точности | Нет | Возможна | Возможна |
Диапазон значений | Зависит от точности | ~1E-307 до ~1E+308 | ~1E-37 до ~1E+38 |
Примеры:
CREATE TABLE example (
decimal_col DECIMAL(10, 2), -- Точность 10 цифр, 2 после запятой
double_col DOUBLE PRECISION, -- Число с плавающей точкой двойной точности
real_col REAL -- Число с плавающей точкой одинарной точности
);
Когда использовать:
- Используйте
decimal
(илиnumeric
), если важна точность (например, для денежных расчетов). - Используйте
double precision
илиreal
, если важна производительность, а небольшая потеря точности допустима.
Если вам нужно сравнивать значения этих типов, помните, что decimal
всегда точный, а double precision
и real
могут давать неточные результаты из-за особенностей хранения чисел с плавающей точкой.
Добавить комментарий