Ver Mensaje Individual
  #1  
Antiguo 23-09-2005
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Reputación: 30
jhonny Va camino a la famajhonny Va camino a la fama
Resta equivocada...

Hola amigos foristas...

Bueno, la verdad esque estuvo un buen rato tratando de buscar un titulo descriptivo para esta pregunta pero me fue imposible encontrar alguno.

Mi situacion es la siguiente:

Estoy desarrolloando un aplicativo medianamente grande que esta dividido por modulos y en uno de ellos hay una opcion para hacer ajustes al inventario por articulos(ya sea por robo, porque se daño, caduco, aparecio, etc...), en esta opcion tu puedes escojer si deseas hacer una salida o entrada de dicho articulo.

El hecho es que uno de los usuarios esta tratando de hacer una salida, mas exactamente esta tratando de sacar del inventario lo unico que queda de cierto artiulo(pongamole el codigo 11000701) que son 0.01 gramos (cosa que ya verifique en el reporte de saldos de inventarios y haciendo el respectivo query); en dicha opcion de ajuste hay una validacion para que no permite sacar mas de lo que hay(cosa que es perfectamente necesaria); el señor usuario digita 0.01 pero el sistema muestra la excepcion que controla que no se saque mas de lo que hay.

Lo primero que se me vino a la cabeza fue "Quiza en la validacion dice if CantidadenBD <= CantidadDigitada then raise exception.create("No es posible"), haciendo que el 0.01 entre en dicho rango de error", asi que inmediatamente fui a verificar dicho pensamiento el cual resulto incorrecto pues decia
Código Delphi [-]
 if CantidadenBD < CantidadDigitada then begin...end;
,
De manera pues que estaba bien...

Luego dije "Caramba quiza el query a traido mal el resultado redondeandolo o que se yo", asi que comence a depurar y Ohhh sorpresa¡¡¡¡¡¡ lo hacia bien, asi que tengo un algoritmo asi:

Código Delphi [-]
 if CantidadenBD < CantidadDigitada then begin...end;

Donde CantidadenBD es igual a : 0.01
y
Donde CantidadDigitada es igual a : 0.01

Entonces, ¿Porque entra en esa condicion cuando no la cumple?, he hecho una prueba poniendo una variable llamada Resta y restandole
CantidadenBD - CantidadDigitada y el resultado es -7.35689749e16, asi que repise manualmente todo el movimiento de las cantidades de dicho articulo en la BD y me sucede lo mismo, cambie el tipo de CantidadDigitada como Double, Extended, Real y tampoco, tambien intente Al llamar el query que me trae CantidadenBD como AsFloat, AsCurrency, y ninguna me funciono y por eso no entiendo que es lo que sucede... si tengo un algoritmo que me dice:

Código Delphi [-]
 if 0.01 < 0.01 then begin...end;

Esta es mi triste situacion , muchas gracias compañeros por su atencion prestada cualquier opinion seria muy valiosa.

P.D.
Motor = FireBird 1.5.
Lenguaje = Delphi 5.
Sistema operativo, donde se a probado = Windows 2000 y en Windows XP.
Procesadores en los que se a probado = Intel y AMD.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita