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