Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-02-2010
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 15
jzginez Va por buen camino
Thumbs down Comparar 2 numeros

Hola amigos aunque el titulo suena muy simple el problema que tengo es el siguiente: estoy haciendo un procedimiento de cobros (abonos) el cual es muy simple tengo una factura para el ejemplo es por $45,289.41 y en esta ventana acepto los pagos menores o iguales al total de la factura (bueno fuera que alguien me quisiera pagar de mas ) en un Tedit se captura la cantidad que el cliente esta abonando, antes de guardar a la base de datos (en sql Server por cierto) verifico que la cantidad no sea mayor al saldo de la factura y si es menor no hay problema pero si es igual, en este caso $45,289.41, me indica que la cantidad no puede ser mayor, el código que utilizo es el siguiente:
Código Delphi [-]
Function TFBABMAbonos.Verifica: Boolean;
Var
  CadTemp: String;
  Monto: Real;
Begin
  CadTemp:= StringReplace(Edit1.Text,'$ ','',[rfReplaceAll]);
  CadTemp:= StringReplace(CadTemp,',','',[rfReplaceAll]);
  Monto:= StrTofloat(CadTemp);
  if (ADOFacturasSaldo.Value < Monto)
    Then Begin
      MessageBox(Handle, PChar('Datos incorrectos'+#10#13+
                              'La cantidad a abonar no puede ser mayor al saldo de la factura'+#10#13+
                              'No se guardardo la información vuelva a intentarlo'),
                PChar('Error al guardar'),
                MB_OK+MB_ICONERROR+MB_DEFBUTTON1+MB_APPLMODAL);
      Result:= False;
      Exit;
    End;
  Result:= True;
End;

Al depurar con F8 veo que la cantidad es igual no tiene ningún carácter o numero de mas, además al verificar el tipo de datos me indica que el que obtengo de la base de datos es currency así que ya use StrToCurr obteniendo el mismo error al comparar; en SQL Server el dato es de tipo numerico(10,2)

De antemano gracias por sus comentarios y ayuda
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
  #2  
Antiguo 15-02-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 15
AzidRain Va por buen camino
El problema que tienes es que estas capturando un valor tipo real a partir de un TEdit comun y corriente. Ya vi que antes de comparar eliminas el '$' y las comas. Pero ¿Y si puso cualquier otro caracter? Te recomiendo usar mejor un control TMaskEdit que ya trae forma de definir mascarillas par ala captura de cantidades en dinero. Ya casi nadie los usa porque hya muchos bibliotecas como las Rx que traen un componente especial para capturar cantidades en dinero y en donde no hay que hacer mas conversiones.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #3  
Antiguo 16-02-2010
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 15
jzginez Va por buen camino
Hola AzidRain te comento que en el TEdit tengo programado keypress y otros eventos para evitar que entre algo diferente a numeros y punto decimal, el signo de $ y las comas las aumento cuando el foco pasa a otro control solo por efecto visual, el TMaskEdit no lo uso porque visualmente no me gustó como muestra en este caso los números, probare los RX que mencionas
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México

Última edición por jzginez fecha: 16-02-2010 a las 04:59:10. Razón: horror de redacción
Responder Con Cita
  #4  
Antiguo 16-02-2010
Avatar de Onti
Onti Onti is offline
Miembro
 
Registrado: jul 2003
Ubicación: La Paz - Bolivia
Posts: 500
Poder: 15
Onti Va por buen camino
Te recomiendo usar las Rx
Responder Con Cita
  #5  
Antiguo 16-02-2010
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 15
jzginez Va por buen camino
Ya baje e instale los Rx voy a probarlas pero ahorita por lo avanzado y urgente del proyecto tuve que hacer el siguiente cambio

Código Delphi [-]
 if (ADOFacturasSaldo.Value < Monto)

por

 if ((ADOFacturasSaldo.Value+0.00001) < Monto)

como verán no es la mejor solución pero mientras el cliente prueba el demo me da tiempo de probar bien y hacer el cambio usando los RX
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México

Última edición por jzginez fecha: 16-02-2010 a las 16:36:45. Razón: error de dedo
Responder Con Cita
  #6  
Antiguo 16-02-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: ago 2007
Posts: 93
Poder: 11
DriverOp Va por buen camino
Me parece que el problema de fondo es de redondeo. Trata de hacer pasar ambos valores por la función RoundTo() al momento de comparar. Por ejemplo:

Código Delphi [-]
if (RoundTo(ADOFacturasSaldo.Value,-2) < RoundTo(Monto,-2)) then
...
Redondea en la segunda cifra decimal.

Ahora el chivo

En mi página web tengo un componente desendiente de TEdit que solo captura números enteros o reales y hace la conversión automáticamente, también previene que el usuario escriba otra cosa que no sea números, punto o coma y los signos mas o menos. Se llama TEditReal.

Última edición por DriverOp fecha: 16-02-2010 a las 20:54:32. Razón: Me faltó un paréntisis
Responder Con Cita
  #7  
Antiguo 18-02-2010
Avatar de jzginez
jzginez jzginez is offline
Miembro
 
Registrado: sep 2003
Ubicación: Puebla, México
Posts: 247
Poder: 15
jzginez Va por buen camino
Hola DriverOp gracias tu solución funciono de maravilla y me ahora el tener que estar cambiando componentes, aunque ya instale los Rx y se ven interesantes, te comento que el TEdit que uso es muy parecido a tu componente, de este foro obtuve el código hacerlo nada mas que no lo lleve al nivel de componente sino que escribí todo el código dentro del código de mi ventana.


Gracias por tu ayuda
__________________
Espero poder seguir exprimiéndote el cerebro 8)
Jorge Zamora Ginez
Puebla, Pue. México
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
comparar numeros como string nikotina Varios 10 16-09-2008 11:11:50
Comparar números. REHome .NET 5 16-07-2008 00:49:18
Comparar fechas creus Varios 3 19-03-2007 14:27:14
comparar listas de numeros Tala SQL 4 06-07-2006 00:45:14
comparar con el mod emiliu Varios 1 23-01-2006 20:55:53


La franja horaria es GMT +2. Ahora son las 10:09:11.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi