QUANTIZE 标量函数

QUANTIZE 函数返回一个十进制浮点值,该值等同于除任何四舍五入外的值,并且符号为 numeric-expression 且指数等于 exp-expression 的指数。

位数(16 位或 34 位)与 numeric-expression 中的位数相同。
Read syntax diagramSkip visual syntax diagramQUANTIZE(numeric-expression ,exp-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