QUANTIZE 标量函数
QUANTIZE 函数返回一个十进制浮点值,该值等同于除任何四舍五入外的值,并且符号为 numeric-expression 且指数等于 exp-expression 的指数。
位数(16 位或 34 位)与 numeric-expression 中的位数相同。
该模式是 SYSIBM。
- numeric-expression
- 返回任何内置数值数据类型的值的表达式。 如果自变量不是十进制浮点值,那么它将转换为 DECFLOAT(34) 进行处理。
- exp-expression
- 返回任何内置数值数据类型的值的表达式。 如果自变量不是十进制浮点值,那么它将转换为 DECFLOAT(34) 进行处理。 exp-expression 用作重新调用 numeric-expression 的示例模式。 忽略 exp-expression 的符号和系数。
结果的系数派生自 numeric-expression 的系数。 如果需要(如果指数在增加)乘以 10 的幂(如果指数在下降)或保持不变(如果指数已等于 exp-expression 的幂),那么它将四舍五入。
CURRENT DECFLOAT ROUNDING MODE 专用寄存器确定舍入方式。
与十进制浮点数据类型的其他算术运算不同,如果量化操作后的系数的长度大于 exp-expression 指定的精度,那么结果为 NaN 并返回警告 (SQLSTATE 0168D)。 除非存在警告条件,否则这将确保 QUANTIZE 的结果的指数始终等于 exp-expression 的结果。
- 如果任一参数为 NaN,那么将返回 NaN
- 如果任一参数为 sNaN,那么返回 NaN 并返回警告 (SQLSTATE 01565)
- 如果两个自变量都是无穷大(正或负),那么将返回与第一个自变量具有相同符号的无穷大
- 如果一个自变量为无穷大(正或负),而另一个自变量不是无穷大,则返回 NaN 并返回警告 (SQLSTATE 0168D)
如果两个自变量都是 DECFLOAT(16),那么函数的结果是 DECFLOAT(16) 值。 否则,该函数的结果是 DECFLOAT(34) 值。 结果可以为空; 如果任何自变量为空,那么结果为空值。
示例
- 示例 1:以下示例显示了 QUANTIZE 函数返回的值,给定了各种输入十进制浮点值并采用 ROUND_HALF_UP 的舍入方式:
QUANTIZE(2.17, DECFLOAT(0.001)) = 2.170 QUANTIZE(2.17, DECFLOAT(0.01)) = 2.17 QUANTIZE(2.17, DECFLOAT(0.1)) = 2.2 QUANTIZE(2.17, DECFLOAT('1E+0')) = 2 QUANTIZE(2.17, DECFLOAT('1E+1')) = 0E+1 QUANTIZE(2, DECFLOAT(INFINITY)) = NaN -- warning QUANTIZE(0, DECFLOAT('1E+5')) = 0E+5 QUANTIZE(217, DECFLOAT('1E-1')) = 217.0 QUANTIZE(217, DECFLOAT('1E+0')) = 217 QUANTIZE(217, DECFLOAT('1E+1')) = 2.2E+2 QUANTIZE(217, DECFLOAT('1E+2')) = 2E+2 - 示例 2:在以下示例中,为 QUANTIZE 函数返回值 -0。 CHAR 函数用于避免客户机程序可能除去减号 :
CHAR(QUANTIZE(-0.1, DECFLOAT(1))) = -0
