Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-10-2008
rodo2 rodo2 is offline
Registrado
 
Registrado: ago 2006
Posts: 3
Poder: 0
rodo2 Va por buen camino
Duda sobre sentencia IF

Hola,

Un saludo a todos antes que nada.
Se me presenta el siguiente problema el cual para mi ex muy extraño.

Tengo dos variables tipo Double

aPrecio y tmpPrecio

Cuando yo hago la comparación de si aPrecio = tmpPrecio me encontrado en algunos casos en el que valor es igual en ambas variables y no entra en la condición.

Código Delphi [-]
if aPrecio = tmpPrecio then
        begin
          Bandera := True;
          Break;
        end;






Adjunto una imagen pq creo que eso lo puede explicar mejor.



Pq estara pasando eso ?

Gracias.
Responder Con Cita
  #2  
Antiguo 09-10-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola, bienvenido al foro.

Una pregunta, los valores de esas variables las obtienes de una base de datos?

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 09-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Muy posiblemente se deba a que la representación interna de un número de punto flotante casi nunca es exacta, de manera que, aunque parezcan iguales, no lo son.

Busca en la ayuda de Delphi acerca de la función CompareValue.

// Saludos
Responder Con Cita
  #4  
Antiguo 09-10-2008
rodo2 rodo2 is offline
Registrado
 
Registrado: ago 2006
Posts: 3
Poder: 0
rodo2 Va por buen camino
Gracias por contestar tan rapido

El primer valor lo saco de la siguiente manera.

aPrecio := StrToFloat("9040");
aPrecio := aPrecio * 0.001;

El segundo valor lo sale por medio de una consulta

tmpPrecio = Query.FieldByName('Precio').AsFloat;
Responder Con Cita
  #5  
Antiguo 09-10-2008
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Cita:
Empezado por rodo2 Ver Mensaje
Gracias por contestar tan rapido

El primer valor lo saco de la siguiente manera.

aPrecio := StrToFloat("9040");
aPrecio := aPrecio * 0.001;

El segundo valor lo sale por medio de una consulta

tmpPrecio = Query.FieldByName('Precio').AsFloat;
El resultado de la multiplicación es igual 9.04 , lo que tienes que hacer es verificar si en la base de datos es igual o diferente.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 09-10-2008
rodo2 rodo2 is offline
Registrado
 
Registrado: ago 2006
Posts: 3
Poder: 0
rodo2 Va por buen camino
Cita:
Empezado por enecumene Ver Mensaje
El resultado de la multiplicación es igual 9.04 , lo que tienes que hacer es verificar si en la base de datos es igual o diferente.

Saludos.
Es igual, en la imagen que subi muestra que tanto la variable aPrecio y tmpPrecio tienen asignado el valor de 9.04
Responder Con Cita
  #7  
Antiguo 09-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola, has la prueba de comparar con la función que te indica el amigo Roman.

Código Delphi [-]
 if CompareValue(aPrecio,tmpPrecio)=0 then
  begin
    Bandera := True;
    Break;
  end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 09-10-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Hola

He hecho esta pequeña prueba

Código Delphi [-]
begin
  aPrecio := StrToFloat('9040');
  aPrecio := aPrecio * 0.001;
  tmpPrecio := 9.04;
  if aPrecio = tmpPrecio then begin
     showMessage('iguales');
  end;
end;

Y si, efectivamente los valores son iguales, lo que me indica que el valor que recuperas de la base no es igual, puede ser que cuando insertas ese valor a la base viene de una operación que contiene mas de dos decimales.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta



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
Duda en sentencia de firebird vivamotos Firebird e Interbase 6 10-09-2007 11:17:18
Duda sobre With lucasarts_18 Varios 6 26-08-2005 19:44:08
Una duda sobre ADO PTW Conexión con bases de datos 1 13-04-2004 23:33:14
Duda sobre BDE vs IBX ESA Firebird e Interbase 3 04-03-2004 17:20:07
Duda sobre ADO Omar Alejandro Conexión con bases de datos 7 31-05-2003 19:52:58


La franja horaria es GMT +2. Ahora son las 06:27:41.


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