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-05-2005
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Errores Delphi 5

Hola. He detectado un error extraño en el Delphi 5 Enterprise que no había visto antes, pero se me da en varias partes del programa. Tengo dos variables de tipo extended. El proceso va leyendo de una base de datos Firebird y acumulando en una u otra variable según un determinado criterio. A medida que se va acumulando se van comparando ambas variables ya que en el momento en el que sean iguales se debe ejecutar un proceso determinado. El problema está en que en el Watch List tengo las variables, ambas ponen el mismo valor, pero al llegar el if (val1=val2) then ... pues no entra por ahí. Lo he probado en otros equipos y con otras bases de datos y pasa lo mismo, y ambas variables valen igual. Al final he tenido que hacer los siguiente:

val1:=strtofloat(formatfloat('#.00',val1));
val2:=strtofloat(formatfloat('#.00',val2));

y así, entonces, al llegar la if:
if (val1=val2) then ... entonces si lo hace.

Me he puesto a revisar otras partes de código y he visto que pasa lo mismo.
He oido por ahí que la versión Delphi 5 tenía problemas con los cálculos matemáticos. No sé si esto es cierto o no, pero desde luego el depurador no anda muy fino.
Alguien sabe como resolverlo?
Salu2.
Responder Con Cita
  #2  
Antiguo 09-05-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Y al hacer el strtoFloat, ¿realmente que estas haciendo? ... Quitando la precisión de decimales

Ten en cuenta que delphi usa una gran precisión con decimales, si el decimal número 13 (por poner un ejemplo) es distinto... pues ya no son iguales. Además está el Epsilon del ordenador, que indica cuanta precisión se puede llegar a alcanzar; [...] de todo esto quiero que veas que en realidad, el Watch List (por optimizar) no está mostrando los valores reales, pero tu programa si usa la precisión de todos los decimales, por eso no entra en los if.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 09-05-2005
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Hola. Gracias por la contestación.
Creo que no es así, porque si los valores que tengo son los siguientes:
val1 val2
40.20
90.47
50.27
---> ahora son iguales
en ningún caso hay posibilidad de que el valor tenga muchos decimales. Además estos datos están sacados de una base de datos de firebird y con 2 decimales de precisión y los valores son los que hay, no hay decimales ocultos por ahí ni nada.
Precisamente hago eso del strtofloat después de convertirlo a texto para quitar esos decimales que me parece que debe ser el error que tiene el Delphi 5 respecto a los cálculos matemáticos, porque otra explicación no se la encuentro.
Salu2.

Última edición por sur-se fecha: 10-05-2005 a las 10:22:55.
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


La franja horaria es GMT +2. Ahora son las 09:46:17.


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