FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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. |
#3
|
|||
|
|||
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.4750.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. |
|
|
|