Función escalar QUANTIZE
La función QUANTIZE devuelve un valor de coma flotante decimal que equivale en valor (excepto para el redondeo) y signo con expresión-numérica y que tiene un exponente igual al exponente de expresión-exp.
El esquema es SYSIBM.
- expresión-numérica
- Expresión que devuelve un valor de cualquier tipo de datos numérico incorporado. Si el argumento no es un valor de coma flotante decimal, se convertirá a DECFLOAT(34) para su proceso.
- expresión-exp
- Expresión que devuelve un valor de cualquier tipo de datos numérico incorporado. Si el argumento no es un valor de coma flotante decimal, se convertirá a DECFLOAT(34) para su proceso. La expresión-exp se usa como patrón de ejemplo para volver a dar escala a expresión-numérica. Se ignora el signo y el coeficiente de expresión-exp.
El coeficiente del resultado deriva del de expresión-numérica. Se redondeo, si es necesario (si el exponente se está aumentando), multiplicado por una potencia de diez (si el exponente se está disminuyendo), o permanece inalterado (si el exponente es ya igual al de expresión-exp).
El registro especial CURRENT DECFLOAT ROUNDING MODE determina la modalidad de redondeo.
Al contrario que otras operaciones aritméticas del tipo de datos de coma flotante decimal, en el caso de que la longitud del coeficiente posterior a la operación de quantize sea superior a la precisión especificada por expresión-exp, el resultado será NaN y se devolverá un aviso (SQLSTATE 0168D). Esta acción asegurará que, a menos que haya una condición de aviso, el exponente del resultado de QUANTIZE siempre será igual al de expresión-exp.
- Si cualquiera de los argumentos es NaN, se devolverá NaN
- Si cualquiera de los argumentos es sNaN, se devolverá NaN y se devolverá un aviso (SQLSTATE 01565)
- Si ambos argumentos son infinito (positivo o negativo), se devolverá infinito con el mismo signo que el primer argumento
- Si un argumento es infinito (positivo o negativo) y el otro argumento no es infinito se devolverá NaN y se devolverá un aviso (SQLSTATE 0168D)
El resultado de la función es un valor de DECFLOAT(16) si ambos argumentos son DECFLOAT(16). En caso contrario, el resultado de la función es un valor DECFLOAT(34). El resultado puede ser nulo; si cualquier argumento es nulo, el resultado es el valor nulo.
Ejemplos
- Ejemplo 1: los ejemplos siguientes muestran los valores devueltos por
la función QUANTIZE, si se dan varios valores coma flotante decimal de
entrada y se supone una modalidad de redondeo de
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 -- aviso 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 - Ejemplo
2: en el ejemplo siguiente, se devuelve el valor -0 para la función QUANTIZE. Se utiliza la función CHAR para evitar la potencial eliminación del signo menos por parte
de un programa cliente:
CHAR(QUANTIZE(-0.1, DECFLOAT(1))) = -0
