Como ya habíamos visto en otros artículos de este blog,cuando en Firebird se realiza una división, la precisión siempre es 18 y la escala puede estar entre 0 y 18.

¿Qué implica esto?

Que el resultado de la división depende de la escala, no de la precisión. Porque la precisión siempre es 18, lo que cambia es la escala. Y dependiendo de la escala hay un rango de valores admisibles que puede llegar a tener el resultado de una división.

El resultado de una división de números escalados (también llamados de coma fija o de punto fijo) siempre es un BIGINT.

Los valores posibles de un BIGINT en Firebird se encuentran entre -9.223.372.036.854.775.808 y +9.223.372.036.854.775.807

Valores posibles del resultado de una división de números con escala

RANGO

Captura 1. Si haces clic en la imagen la verás más grande

Comentarios:

Como se puede ver en la Captura 1. a medida que aumenta la escala el rango de valores disponibles va disminuyendo. La coma se va moviendo hacia la izquierda y la parte entera es cada vez más pequeña. En general, para la grandísima mayoría de las aplicaciones una escala de 4 es suficiente. En pocos casos se podría necesitar una escala de 6 y una escala de 8 ya es prácticamente inexistente. Así que usar escalas mayores no tiene sentido (en general, puede haber algunas muy pocas excepciones).

Recuerda que los números con escala se usan cuando algo se cuenta, en cambio los números de coma flotante se usan cuando algo se mide.

Un uso típico de los números con escala es para el dinero. Y una escala mayor que 8 no es para nada habitual.

RANGO2

Captura 2. Si haces clic en la imagen la verás más grande

Para no lidiar con tantos decimales, lo más práctico es fijarnos solamente en la parte entera, tal y como vemos en la Captura 2., entonces allí podemos notar que si tenemos una escala de 18 el resultado de la división debe estar entre -9 y 9 para no tener un error de overflow. Similarmente si la escala es de 17 el resultado de la división debe estar entre -92 y 92 para no tener un error de overflow. Y así sucesivamente.

Conclusión:

Cuando en Firebird realizas un división entre números con escala el rango de valores posibles para el resultado de esa división depende de la escala elegida, tal y como podemos ver en la Captura 1. y en la Captura 2.

Por lo tanto, si realizas una división y obtienes un mensaje de “error de overflow” el motivo muy probablemente es que el resultado de tu división está fuera del rango de valores admisibles para la escala que usaste.

Artículos relacionados:

Error 802 en una consulta

Usando NUMERIC y DECIMAL

Confusiones comunes al declarar un columna como NUMERIC o DECIMAL

Determinando la precisión y la escala de una columna NUMERIC

CAST()

El índice del blog Firebird21

El foro del blog Firebird21