FirebirdSQL logo

SET DECFLOAT ROUND

Оператор SET DECFLOAT ROUND изменяет режим округления для текущей сессии.Поддерживаются следующие режимы округления совместимые со стандартом IEEE:

CEILING

Округление сверху. Если все отбрасываемые цифры равны нулю или знак числа отрицателен, то последняя не отбрасываемая цифра остаётся прежней. В противном случае последняя не отбрасываемая цифра инкрементируется на единицу (округляется в большую сторону).

UP

Округление по направлению от нуля (усечение с приращением). Отбрасываемые значения игнорируются.

HALF_UP

Округление к ближайшему значению. Используется по умолчанию. Если результат равноудаленный, выполняется округление в большую сторону. Если отбрасываемые значения больше чем или равны половине (0,5) единицы в следующей левой позиции, последняя не отбрасываемая цифра инкрементируется на единицу (округляется в большую сторону). В противном случае отбрасываемые значения игнорируются.

HALF_EVEN

Округление к ближайшему значению. Если результат равноудаленный, выполняется округление так, чтобы последняя цифра была четной. Если отбрасываемые значения больше половины (0,5) единицы в следующей левой позиции, последняя не отбрасываемая цифра инкрементируется на единицу (округляется в большую сторону). Если они меньше половины, результат не корректируется, то есть отбрасываемые знаки игнорируются. В противном случае, когда отбрасываемые значения точно равны половине, последняя не отбрасываемая цифра не меняется, если она является четной и инкрементируется на единицу (округляется в большую сторону) в противном случае (чтобы получить четную цифру). Этот режим округления называется также банковским округлением и дает ощущение справедливого округления.

HALF_DOWN

Округление к ближайшему значению. Если результат равноудаленный, выполняется округление в меньшую сторону. Если отбрасываемые значения больше чем или равны половине (0,5) единицы в следующей левой позиции, последняя не отбрасываемая цифра декрементируется на единицу (округляется в меньшую сторону). В противном случае отбрасываемые значения игнорируются.

DOWN

Округление по направлению к нулю (усечение). Отбрасываемые значения игнорируются.

FLOOR

Округление снизу. Если все отбрасываемые цифры равны нулю или знак положителен, последняя не отбрасываемая цифра не меняется. В противном случае (знак отрицателен) последняя не отбрасываемая цифра инкрементируется на единицу.

REROUND

Округление к большему значению, если округляется 0 или 5, в противном случае округление происходит к меньшему значению.

Example 1. Изменение режима округления
SET DECFLOAT ROUND HALF_DOWN;
Режимы округления 12.341 12.345 12.349 12.355 12.405 -12.345

CEILING

12.35

12.35

12.35

12.36

12.41

-12.34

UP

12.35

12.35

12.35

12.36

12.41

-12.35

HALF_UP

12.34

12.35

12.35

12.36

12.41

-12.35

HALF_EVEN

12.34

12.34

12.35

12.36

12.40

-12.34

HALF_DOWN

12.34

12.34

12.35

12.35

12.40

-12.34

DOWN

12.34

12.34

12.34

12.35

12.40

-12.34

FLOOR

12.34

12.34

12.34

12.35

12.40

-12.35

REROUND

12.34

12.34

12.34

12.36

12.41

-12.34

SET DECFLOAT TRAPS

Оператор SET DECFLOAT TRAPS изменяет поведение ошибок при операциях с типом DECFLOAT.

По умолчанию исключения генерируются для следующих ситуаций: DIVISION_BY_ZERO,INVALID_OPERATION,OVERFLOW;это значение по умолчанию соответствует поведению, определенному в стандарте SQL: 2016 для DECFLOAT.Этот оператор контролирует, приводят ли определенные исключительные условия к ошибке (“ловушка” или “trap”) илиальтернативной обработке (например, потеря значимости возвращает 0, если не установлена, либо переполнение возвращает бесконечность).Первоначальная конфигурация соединения также может быть указана с помощью тега DPB isc_dpb_decfloat_trapsс желаемыми значениями trap_opt, разделенными запятыми, в виде строкового значения.

Допустимые варианты ловушек (исключительных условий):

Division_by_zero

(по умолчанию)

Inexact

 — 

Invalid_operation

(по умолчанию)

Overflow

(по умолчанию)

Underflow

 — 

Example 1. Установка ситуаций для которых будет генерироваться исключение
SET DECFLOAT TRAPS TO Division_by_zero, Inexact, Invalid_operation, Overflow, Underflow;