В 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 могут давать неточные результаты из-за особенностей хранения чисел с плавающей точкой.

Добавить комментарий