Функции для работы с DECIMAL#

DECIMAL литералы#

Используйте синтаксис DECIMAL 'xxxxxxx.yyyyyyy' для определения DECIMAL литерала.

Precision будет равен количеству цифр в литерале (включая конечные и ведущие нули). Scale будет равен количеству цифр дробной части (включая конечные нули).

Пример литерала

Тип данных

DECIMAL '0'

DECIMAL(1)

DECIMAL '12345'

DECIMAL(5)

DECIMAL '0000012345.1234500000'

DECIMAL(20, 10)

Арифметические операторы#

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

Операция

Precision результата

Scale результата

x + y и 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)

Если результат операции не может быть точно представлен с заданными precision и scale, CedrusData возвращает ошибку Value is out of range.

При работе с DECIMAL типами с разным precision и scale, сначала происходит приведение значений к общему типу. Для типов со значением precision, близкому к предельному (38), это может привести к ошибке Value is out of range. Например, общим типом для decimal(38, 0) и decimal(38, 1) будет тип decimal(38, 1), но некоторые значения decimal(38, 0) не могут быть точно представлены с помощью типа (38, 1).

Операторы сравнения#

Все стандартные Операции сравнения работают для DECIMAL типа.

Унарные операторы#

Оператор - изменяет знак DECIMAL значения на противоположный. Тип результата совпадает с типом аргумента.