Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Duda sobre sentencia IF (https://www.clubdelphi.com/foros/showthread.php?t=60652)

rodo2 09-10-2008 00:00:53

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.

egostar 09-10-2008 00:29:55

Hola, bienvenido al foro.

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

Salud OS

roman 09-10-2008 00:30:28

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

rodo2 09-10-2008 00:51:03

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;

enecumene 09-10-2008 00:57:01

Cita:

Empezado por rodo2 (Mensaje 319079)
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 :confused: :confused: :confused:, lo que tienes que hacer es verificar si en la base de datos es igual o diferente.

Saludos.

rodo2 09-10-2008 00:58:55

Cita:

Empezado por enecumene (Mensaje 319080)
El resultado de la multiplicación es igual 9.04 :confused: :confused: :confused:, 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

Caro 09-10-2008 01:01:58

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

egostar 09-10-2008 01:24:08

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 franja horaria es GMT +2. Ahora son las 10:42:00.

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