Функции и операторы decimal#

Decimal literals#

Используйте синтаксис DECIMAL 'xxxxxxx.yyyyyyy', чтобы определить decimal literal.

Точность decimal-типа для literal будет равна количеству цифр в literal (включая конечные и ведущие нули). Масштаб будет равен количеству цифр в дробной части (включая конечные нули).

Пример literal

Тип данных

DECIMAL '0'

DECIMAL(1)

DECIMAL '12345'

DECIMAL(5)

DECIMAL '0000012345.1234500000'

DECIMAL(20, 10)

Бинарные арифметические операторы decimal#

Поддерживаются стандартные математические операторы. Таблица ниже описывает правила вычисления точности и масштаба для результата. Предполагается, что x имеет тип DECIMAL(xp, xs), а y имеет тип DECIMAL(yp, ys).

Операция

Точность типа результата

Масштаб типа результата

x + y and x - y

min(38,
    1 +
    max(xs, ys) +
    max(xp - xs, yp - ys)
)

max(xs, ys)

x * y

min(38, xp + yp)

xs + ys

x / y

min(38,
    xp + ys-xs
    + max(0, ys-xs)
    )

max(xs, ys)

x % y

min(xp - xs, yp - ys) +
max(xs, bs)

max(xs, ys)

Если математический результат операции не может быть точно представлен с точностью и масштабом типа результата, возникает исключение: 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#

Оператор - выполняет отрицание. Тип результата совпадает с типом аргумента.