Числовые типы

Имя Псевдоним Диапазон Описание

BIGINT

INTEGER

…​

Целые числа

NUMERIC

DECIMAL

WIDTH: 37

Вещественные числа с заданной точностью

DOUBLE

FLOAT

…​

Вещественные числа с переменной точностью

Целочисленный тип

  • BIGINT

    • Псевдоним: INTEGER

Тип данных BIGINT хранит целые числа, то есть числа без дробных компонентов, различных диапазонов. Попытки сохранить значения за пределами допустимого диапазона приведут к ошибке.

Диапазон возможных значений для типа BIGINT: от до .

Тип с заданной точностью

  • NUMERIC

    • Псевдоним: DECIMAL

Тип данных NUMERIC (WIDTH, SCALE) представляет собой точное десятичное значение с фиксированным десятичным разделителем — точкой.

При создании значения типа NUMERIC можно указать параметры WIDTH и SCALE.

  • Параметр WIDTH определяет максимальное общее количество цифр.

  • Параметр SCALE определяет количество цифр после десятичной точки.

Например, тип NUMERIC(3, 2) может содержать значение , но не может содержать значение или . Если параметры WIDTH и SCALE не заданы явно, то используются значения по умолчанию: NUMERIC(37,18).

Сложение, вычитание и умножение двух десятичных чисел с фиксированной точкой возвращает другое десятичное число с фиксированной точкой с требуемыми WIDTH и SCALE или выдает ошибку, если требуемая WIDTH превышает максимальную поддерживаемую WIDTH, которая составляет 37.

Если вам требуется хранение чисел с известным количеством десятичных знаков, а также точные операции сложения, вычитания и умножения (например, для денежных сумм), то следует использовать тип данных с заданной точностью NUMERIC.

Тип с переменной точностью

  • DOUBLE

    • Псевдоним: FLOAT

Тип данных DOUBLE — числовой тип с переменной точностью. Этот тип хранит число с плавающей десятичной точкой двойной точности (8 байтов).

Диапазон возможных значений для типа DOUBLE: от до .

Как и в случае с типом данных NUMERIC, при преобразовании литералов или приведении других типов данных к типу с переменной точностью входные данные, которые не могут быть представлены точно, сохраняются в виде приближенных значений.

В то время как умножение, сложение и вычитание для типа NUMERIC являются точными операциями, те же операции для типа с переменной точностью являются только приблизительными.

Если вам нужно выполнять быстрые или сложные вычисления, тип данных с переменной точностью может быть более подходящим, чем тип NUMERIC. Однако, если вы используете результаты этих вычислений для принятия важных решений, то вам следует тщательно проанализировать реализацию этих вычислений в пограничных случаях (диапазоны, бесконечные значения, антипереполнения, недопустимые операции и т.п.). Они могут обрабатываться иначе, чем вы ожидаете.

Примеры

Создадим таблицу numbers со столбцами, имеющими числовые типы BIGINT, NUMERIC(4,3), DOUBLE и заполним одну строку значениями , и :

CREATE TABLE numbers(
    bigint BIGINT,
    numeric NUMERIC(4,3),
    double DOUBLE);

INSERT INTO numbers VALUES
    (2^62, 1.1, 3.14159265358979323846);

SELECT * FROM numbers;
+---------------------+---------+-------------------+
|        bigint       | numeric |       double      |
+---------------------+---------+-------------------+
| 4611686018427388000 | 1.100   | 3.141592653589793 |
+---------------------+---------+-------------------+

Обратите внимание, что в программном выводе в столбце numeric исходное число отображается с указанной точностью (3 знака после десятичного разделителя), а в столбце double исходное число отображается с максимально возможной точностью, поэтому количество знаков после разделителя меньше, чем в введенном числе.