FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Problema decimales en 64bits
Bueno, si aun no lo han sufrido estén atentos.
Transmito nuestra reciente experiencia. Nosotros utilizamos XE-10.2 Tokyo v.25.0.263x pero aplica en cualquier XE compilado en 64 bits Observen este ejemplo: La pregunta del millón es: ¿cuál será la respuesta de salida? Respuesta: "not equal" Aquí un muy buen artículo, totalmente recomendado, con la explicación del problema: http://rvelthuis.de/articles/articles-floats.html Por ejemplo, a nosotros nos acaba de pasar con, nada menos, que la emisión de comprobantes de ventas y el cálculo de percepciones de ingresos brutos. Algo sencillo: Si el valor de entrada es por ejemplo "2946" sin ningún decimal, la función anterior devolverá "2945" y, si se trata de dinero es un Euro menos y si se trata de enviar un rover a Marte con suerte lo aterrizamos en Urano Aquí, http://docwiki.embarcadero.com/RADSt...int_Arithmetic la gente de Embarcadero te ilustra como ellos se "lavan las manos" y en síntesis te dicen que el problema puede ser tu diseño, por pensar que una variable Single o Double de valor "0,25" en realidad por ejemplo puede llegar a ser "0.2499999999999999999999" y que obviamente TODO el mundo lo sabe menos vos ...empiezo a extrañar mucho al querido Clipper 5.01 Ahora bien, a modo de resumen, utilizando XE compilado en 64 bits, el tipo Double pasa a ser interpretada como Extended y no solo eso, todo el manejo de variables internamente XE lo hace convertido a Extended. Por consiguiente, como lo recomendable es no ir cambiando entre tipos para que nos se "pierdan decimales" entre conversiones, lo recomendado es manejar todo en Extended, aun cuando necesites operar solo con 2 decimales Sin embrago, en operaciones tradicionales de suma, resta y multiplicación, los resultados parecen mantenerse bien aun cuando sea entre tipos diferentes. Las divisiones, exponenciales y otros cómputos como el uso de RoundTo() que puedan generar varios decimales ya presentan algún problema. En el caso de REDONDEO, nuestra solución fue utilizar una función propia, basada en una antigua de Delphi 7 y "forzando" a utiliza el redondeo hacia arriba:
Suerte amigos!
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
problema con decimales largos | darkbits | Varios | 11 | 24-06-2015 01:21:36 |
Problema con decimales (componente rx) | look | OOP | 16 | 15-12-2011 19:51:26 |
problema con el registro de decimales | Choclito | Varios | 7 | 29-08-2007 02:19:40 |
Problema con los decimales | anam.soria | Firebird e Interbase | 1 | 07-03-2007 18:43:39 |
Problema con obtencion de decimales | onlytk | Varios | 5 | 18-07-2006 02:48:00 |
|