Функции и операторы decimal#
Decimal literals#
Используйте синтаксис DECIMAL 'xxxxxxx.yyyyyyy', чтобы определить decimal literal.
Точность decimal-типа для literal будет равна количеству цифр в literal (включая конечные и ведущие нули). Масштаб будет равен количеству цифр в дробной части (включая конечные нули).
Пример literal |
Тип данных |
|---|---|
|
|
|
|
|
|
Бинарные арифметические операторы decimal#
Поддерживаются стандартные математические операторы. Таблица ниже описывает
правила вычисления точности и масштаба для результата.
Предполагается, что x имеет тип DECIMAL(xp, xs), а y имеет тип DECIMAL(yp, ys).
Операция |
Точность типа результата |
Масштаб типа результата |
|---|---|---|
|
min(38,
1 +
max(xs, ys) +
max(xp - xs, yp - ys)
)
|
|
|
min(38, xp + yp)
|
|
|
min(38,
xp + ys-xs
+ max(0, ys-xs)
)
|
|
|
min(xp - xs, yp - ys) +
max(xs, bs)
|
|
Если математический результат операции не может быть точно представлен
с точностью и масштабом типа результата,
возникает исключение: Value is out of range.
При операциях над decimal-типами с разным масштабом и точностью значения
сначала приводятся к общему super type. Для типов, близких к максимально
представимой точности (38), это может приводить к ошибкам Value is out of range,
когда один из операндов не помещается в общий super type. Например, общий
super type для decimal(38, 0) и decimal(38, 1) — это decimal(38, 1), но
некоторые значения, которые помещаются в decimal(38, 0), не могут быть
представлены как decimal(38, 1).
Comparison operators#
Все стандартные Функции и операторы сравнения работают для типа decimal.
Unary decimal operators#
Оператор - выполняет отрицание. Тип результата совпадает с типом аргумента.