Числовые типы
Целочисленный тип
-
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 исходное число отображается с максимально возможной точностью, поэтому количество знаков после разделителя меньше, чем в введенном числе.