![]() |
Presición Imprecisa
Hola, escribo porque desde hace un tiempo tengo unos problemillas con delphi comparando valores con presición. Ej: comparo 72.49 = 72.49, ambos double, y no siempre me da que son iguales. Varia de acuerdo a como voy calculando los números, por lo general se mama cuando sumo dos listas y luego comparo sus totales.
Buscando encontre este ejemplo de mala praxis de Delphi: Código:
var a, b, c: double; |
Cita:
CompareValue(a,b); Espero te sirva. P.D. Aguante el avatar de pampita... que mujer... pensar que me la lleva puesta en la calle saliendo de un cliente en Recoleta. Creo que le deje marcado el botón de mi camisa en el pecho. :p Saludos. |
Ok. Pruebo, yo lo habia solucionado el problema utilizando la funcion RoundTo(num, dec).
Lo que en realidad queria averiguar es si existe un parche para Delphi o alguna directiva para solucionar este problema, porque el programa es grande y no quiero tener que revisar y modificar todo el código. Gracias por la respuesta ! |
Cita:
En mio opinión la solución de roundto no es solución dado que le estas quitando definición al dato, ejemplo para seguir el mismo caso, si era 2,3900000000001 se convierte en 2,39. Segun para que lo uses eso te va a fectar la resolución final. El uso de la funcion compare es lo ideal porque no afecta al dato y compara precisamente el dato completo. Saludos. |
Donald. ES UN BUG DE DELPHI.
Sino fijate en el ejemplo que puse de sumar 1000000 de veces 0.01, es imposible que me de otra cosa que no sea 10000, pero sin embargo en Delphi da cualquiera. NO puede ser que el numero 2.39 me lo guarde como 2,3900000000001 ... este es OTRO numero, internamente lo esta representando MAL. Cuando comparas dos numeros con igual (10 = 10) internamente el Delphi deberia llamar a compare, no yo ... PARA QUE EXISTE EL IGUAL ???? Sobre lo último que decis sobre compare tenes toda la razon... Un abrazo. |
Cita:
Cita:
Cita:
Ya mismo investigo este tema porque no me cierra. Estas usando D2007 o una versión anterior? Saludos. |
Jajaja... Perdon por la euforia ....
Estoy utilizando Delphi 7 |
han probado en lugar del tipo double el tipo currency? a mi me ha funcionado muy bien para calculos,
si no me creen prueben el ejemplo, solo cambien el double por currency... |
bueno Luis, aparentemente has dado en la tecla ... GRACIAS !!!!
yo habia probado con double, real, extended ... me falto ese tipo. Igual no justifico, tendria que funcionar con todos los tipos. |
Cita:
Descargalo aqui. Saludos. |
Amigo Donald. Me fije en el código que me mandastes y esta bien, pero le estas haciendo una conversion al dato.
Proba de ejecutar el código que postee, tal cual, y contame. |
Cita:
No entiendo a que conversión te referís. Por favor modifica el código del proyecto y envíalo así lo reviso. Saludos. |
juanmdq - asi es, no es justificación pero lo bueno es que hay algo que funciona y nos saca del apuro, la verdad yo tengo AÑOS que no utilizo double, real ni esos, puro currency
|
La franja horaria es GMT +2. Ahora son las 13:24:52. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi