Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Errores Delphi 5 (https://www.clubdelphi.com/foros/showthread.php?t=21156)

sur-se 09-05-2005 09:29:27

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.

Lepe 09-05-2005 10:33:59

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

sur-se 09-05-2005 11:28:51

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.


La franja horaria es GMT +2. Ahora son las 20:58:15.

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