Ver Mensaje Individual
  #5  
Antiguo 08-12-2017
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Reputación: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Por supuesto que es un problema del programador, y no de Embarcadero. No se pueden comparar numeros de coma flotante por igualdad, y el que te diga lo contrario, está mintiendo o no tiene idea del tema. Los numeros flotantes se pueden comparar "aproximadamente". Esto es intrinseco a como se representan estos numeros, basicamente, hay números que no se pueden representar exactamente, entonces por eso siempre se "redondea" o se "aproximan".

Si necesitas precision, y usas numeros de aritmetica flotante, vas mal. Deberias usar un tipo de datos de los que se conoce como "fixed". En Delphi, ese tipo de datos se llama Currency. Desde todos los lenguajes de programacion, hasta las bases de datos, contemplan este tipo de datos (puede ser llamado currency, money, fixedfloat, etc). Basicamente funciona como un entero de 64bits (con signo), pero del cual se interpretan los ultimos 4 digitos del numero como los decimales; en la practica, no creo que necesites mas de 4 decimales para manejar dinero. En Delphi creo que existe otra alternativa, el Binary Coded Decimal (BCD), pero nunca lo he usado y no puedo opinar

Te recomiendo que leas esto http://floating-point-gui.de/
Responder Con Cita