Como seguramente sabes, la división por cero tiene un valor indeterminado, no se puede conocer, y por lo tanto todos los lenguajes de programación la rechazan y elevan un mensaje de error si lo intentas.

¿Pero por qué dividir por cero da como resultado un valor indeterminado? ¿Te planteaste alguna vez esa pregunta?

La respuesta está en las reglas de la división: si “a” dividido “b” da como resultado “c” entonces “c” por “b” debe sí o sí dar como resultado “a”.

En números:

Si 10 / 5 es igual a 2, entonces 2 por 5 debe ser sí o sí igual a 10.

Si 11 / 5 es igual a 2 con resto 1, entonces 2 por 5 más 1 debe ser igual a 11.

Muy bien, muy bien, entendido, pero … ¿qué pasa cuando se divide por 0?

Si 10 / 0 es igual a “x”, entonces “x” por 0 debe sí o sí ser igual a 10.

Pero … cualquier número multiplicado por 0 da como resultado 0. Es imposible obtener 10 (o cualquier otro número distinto de cero) si lo multiplicamos por 0. Cualquier “x” multiplicado por 0 siempre nos dará 0, jamás nos dará 10 (o algún otro número).

Por ese motivo se dice que la división por cero es indeterminada (no infinito, que es otra cosa).

Cuando programamos, a veces podríamos encontrarnos con el problema de la división por 0. Un ejemplo podría ser cuando queremos calcular el porcentaje de utilidad que tiene un producto. Para ello usamos una regla de 3 simple:

Si el Precio de Costo equivale al 100%, entonces el Precio de Venta equivaldrá al Precio de Venta por 100% dividido el Precio de Costo.

PrecioCosto ————— 100%

PrecioVenta ————— x

x = PrecioVenta * 100% / PrecioCosto

y para obtener el porcentaje de ganancia le restamos 100%, quedando por lo tanto nuestra fórmula así:

PorcentajeGanancia = PrecioVenta * 100% / PrecioCosto – 100%

Hasta allí todo bien, ningún problema pero … ¿y si por algún motivo en nuestra tabla tenemos un PrecioCosto igual a cero?

No debería ocurrir, pero ocurrió. El usuario no sabía cual era el PrecioCosto de un producto y le puso cero. Y más tarde cuando queremos calcular el porcentaje de ganancia nos encontramos con el problema de la división por cero.

Podemos resolver muy fácilmente este problema usando la función IIF(), como se ve a continuación:

IIF(PrecioCosto > 0, PrecioVenta * 100 / PrecioCosto – 100, 0)

O sea que la división se efectúa si y solo si el PrecioCosto es mayor que cero. Si es igual o menor que cero entonces se devuelve cero.

Se supone que el usuario cuando ve en un informe que el porcentaje de ganancia de algunos productos es cero se tomará el trabajo de investigar que pasó ahí, por qué motivo ese porcentaje es cero.

Nosotros ya cumplimos, por lo menos no le aparecerá un feo mensaje en la pantalla diciéndole “Arithmetic exception, numeric overflow, or string truncation.”

Artículo relacionado:

El índice del blog Firebird21

Anuncios