FirebirdSQL logo

Примеры NORMALIZE_DECFLOAT

Example 1. Нормализация различных значений типа DECFLOAT
NORMALIZE_DECFLOAT(12.00) -- возвращает 12
NORMALIZE_DECFLOAT(120) -- возвращает 1.2E+2

QUANTIZE()

Доступно в

DSQL, PSQL

Синтаксис
QUANTIZE (decfloat_value, exp_value)
Table 1. Параметры функции QUANTIZE
Параметр Описание

decfloat_value

Значение или выражение типа DECFLOAT или быть совместимым с типом DECFLOAT.

exp_value

Значение или выражение для использования в качестве показателя степени;должно иметь тип DECFLOAT или быть совместимым с типом DECFLOAT.

Тип возвращаемого результата

DECFLOAT

Функция QUANTIZE возвращает значение первого аргумента масштабированным с использованием второго значения в качестве шаблона.Другими словами функция QUANTIZE возвращает значение DECFLOAT, равное по значению (за исключением любого округления) и знаку decfloat_value, а также экспоненте, равной по значению экспоненте exp_value.Функцию QUANTIZE можно использовать для реализации округления с точностью до нужного знака, например, округление до ближайшего цента с использованием установленного режима округления DECFLOAT.

Тип возвращаемого значения — DECFLOAT(16), если оба аргумента — DECFLOAT(16), в противном случае тип результата — DECFLOAT(34).

Note

Целевой показатель — это показатель, используемый в формате хранения Decimal64 или Decimal128 для DECFLOAT из exp_value.Это не обязательно то же самое, что экспонента, отображаемая в таких инструментах, как isql.Например, значение 1.23E+2 - это коэффициент 123 и показатель степени 0,а значение 1.2 - это коэффициент 12 и показатель степени -1.

Если показатель decfloat_value больше, чем показатель exp_value, коэффициент decfloat_value умножается на степень десяти, и его показатель уменьшается, если показатель меньше, то его коэффициент округляется с использованием текущего режима округления decfloat, и его показатель увеличивается.

Когда невозможно достичь целевого показателя экспоненты, поскольку коэффициент превысит целевую точность (16 или 34 десятичных знака), то либо возникает ошибка “Decfloat float invalid operation”, либо возвращается NaN (в зависимости от текущего конфигурация decfloat traps).

Ограничений на exp_value практически нет.Однако почти во всех случаях использования NaN/sNaN/Infinity будет вызывать исключение(если это не разрешено текущей конфигурацией decfloat traps)

Если одно из значений NULL, то результатом функции будет NULL и т.д.

Example 1. Использование функции QUANTIZE
select v, pic, quantize(v, pic) from examples;
V                       PIC                   QUANTIZE
======================= ===================== ==================
                   3.16                 0.001              3.160
                   3.16                 0.01               3.16
                   3.16                 0.1                3.2
                   3.16                 1                  3
                   3.16                 1E+1               0E+1
                   -0.1                 1                 -0
                      0                 1E+5               0E+5
                    316                 0.1              316.0
                    316                 1                316
                    316                 1E+1             3.2E+2
                    316                 1E+2               3E+2

TOTALORDER()

Доступно в

DSQL, PSQL

Синтаксис
TOTALORDER (decfloat1, decfloat2)
Table 1. Параметры функции TOTALORDER
Параметр Описание

decfloat1, decfloat2

Значение или выражение типа DECFLOAT или быть совместимым с типом DECFLOAT.

Тип возвращаемого результата

SMALLINT

Функция TOTALORDER сравнивает два значения типа DECFLOAT, включая специальные значения.Сравнение является точным. Замыкающие нули учитываются при сравнении.

Функция возвращает:

  • -1 — если первое значение меньше второго;

  • 0 — если значения равны;

  • 1 — если первое значение больше второго.

Сравнений значений DEFLOAT происходит в следующем порядке:

-nan < -snan < -inf < -0.1 < -0.10 < -0 < 0 < 0.10 < 0.1 < inf < snan < nan

Криптографические функции

В Firebird 4.0 поддерживается только подмножество симметричных алгоритмов шифрования (как блочных так и потоковых), так и RSA.