Problemas de calculo :/

Ya sea que trabajemos con algún lenguaje de programación o base de datos, lo habitual es dejarle a estos las operaciones en este caso suma o resta de inventarios, pero hoy veremos un gran problema no esperado y que claro el resultado no es lógico.

En el problema que me he enfrentado es la actualización de inventarios, lo mas habitual es hacer la siguiente consulta directamente en la base de datos:

Estas consultas fueron realizadas en MySql

UPDATE productos SET existencias = existencias + 87 WHERE id = 132

Hasta aquí todo bien  pero si trabábamos con decimales podremos toparnos con un resultado erróneo, como no lo muestra la siguiente consulta:

SELECT existencia, (existencia + 0.07 ), (24.92 + 0.07) FROM productos WHERE id = ‘2640’

Los tres resultados que nos arroga son:

  1. Existencia del producto.
  2. Existencia final después de actualizar nuestro inventario (normalmente usamos esta expresión).
  3. Existencia final del inventario pero usando valores numéricos directos en la consulta, nada de referencia a valores.

image

 

Lo peor es que que estas operaciones en VB 2005 arrogan el mismo valor larguísimo, entonces lo que podremos hacer para evitar estos valores no deseados es hacer dos consulta en lugar de una:

1 – Primero obtenemos el inventario

SELECT existencia FROM productos WHERE id = ‘2640’

2 – Después de esto hacemos un UPDATE pero con los valores directos

UPDATE productos SET existencia = (24.92 + 0.07) WHERE id = ‘2640’

Aparentemente esto no tiene sentido, o es redundante pero si alguien quiere compartir una experiencia similar y como la resolvió les aseguro que estaremos encantados de leerla.

Ahora veremos la misma consulta pero en SQLite

La imagen habla por si sola.

image

Leave a Reply

Your email address will not be published. Required fields are marked *