Глава 4. Типы данных СУБД PostgreSQL При выборе конкретного целочисленного типа принимают во внимание диапазон
допустимых значений и затраты памяти. Зачастую тип integer считается оптималь-
ным выбором с точки зрения достижения компромисса между этими показателями.
Числа фиксированной точности представлены двумя типами — numeric и decimal.
Однако они являются идентичными по своим возможностям. Поэтому мы будем про-
водить изложение на примере типа numeric. Для задания значения этого типа ис-
пользуются два базовых понятия: масштаб (scale) и точность (precision). Масштаб
показывает число значащих цифр, стоящих справа от десятичной точки (запятой).
Точность указывает общее число цифр как до десятичной точки, так и после нее. На-
пример, у числа 12.3456 точность составляет 6 цифр, а масштаб — 4 цифры.
Параметры этого типа данных указываются в круглых скобках после имени типа:
numeric(точность, масштаб). Например, numeric(6, 2).
Его главное достоинство — это обеспечение точных результатов при выполнении вы-
числений, когда это, конечно, возможно в принципе. Это оказывается возможным
при выполнении сложения, вычитания и умножения. Числа типа numeric могут хра-
нить очень большое количество цифр: 131 072 цифры — до десятичной точки (запя-
той), 16 383 — после точки. Однако нужно учитывать, что такая точность достигается
за счет замедления вычислений по сравнению с целочисленными типами и типами с
плавающей точкой. При этом для хранения числа затрачивается больше памяти, чем
в случае целых чисел.
Данный тип следует выбирать для хранения денежных сумм, а также в других случа-
ях, когда требуется гарантировать точность вычислений.
Представителями типов данных с плавающей точкой являются типы real и double
precision. Они представляют собой реализацию стандарта IEEE «Standard 754 for
Binary Floating-Point Arithmetic». Тип данных real может представить числа в диа-
пазоне, как минимум, от 1E−37 до 1E+37 с точностью не меньше 6 десятичных цифр.
Тип double precision имеет диапазон значений примерно от 1E−307 до 1E+308
с точностью не меньше 15 десятичных цифр.
При попытке записать в такой столбец слишком большое или слишком маленькое
значение будет генерироваться ошибка. Если точность вводимого числа выше допу-
стимой, то будет иметь место округление значения. А вот при вводе очень маленьких
чисел, которые невозможно представить значениями, отличными от нуля, будет ге-
нерироваться ошибка потери значимости, или исчезновения значащих разрядов (an
underflow error).
52
4.1. Числовые типы При работе с числами таких типов нужно помнить, что сравнение двух чисел с пла-
вающей точкой на предмет равенства их значений может привести к неожиданным
результатам.
Например: