QUANTIZE()
DSQL, PSQL
QUANTIZE (decfloat_value, exp_value)
Параметр | Описание |
---|---|
decfloat_value |
Значение или выражение типа |
exp_value |
Значение или выражение для использования в качестве показателя степени;должно иметь тип |
DECFLOAT
Функция QUANTIZE
возвращает значение первого аргумента масштабированным с использованием второго значения в качестве шаблона.Другими словами функция QUANTIZE
возвращает значение DECFLOAT
, равное по значению (за исключением любого округления) и знаку decfloat_value, а также экспоненте, равной по значению экспоненте exp_value.Функцию QUANTIZE
можно использовать для реализации округления с точностью до нужного знака, например, округление до ближайшего цента с использованием установленного режима округления DECFLOAT
.
Тип возвращаемого значения — DECFLOAT(16)
, если оба аргумента — DECFLOAT(16)
, в противном случае тип результата — DECFLOAT(34)
.
Note
|
Целевой показатель — это показатель, используемый в формате хранения |
Если показатель 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
и т.д.
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