Ver Mensaje Individual
  #1  
Antiguo 18-04-2011
Avatar de darkerbyte
darkerbyte darkerbyte is offline
Miembro
 
Registrado: feb 2005
Posts: 196
Reputación: 20
darkerbyte Va por buen camino
Unhappy No entiendo el uso de decimales

Hola amigos.

He tenido un problema (no se si ocurrira solo con D7 que es con el que trabajo) ya que cuando trabajo con numeros flotantes tiende a agregarme decimales. No le habia dado importancia hasta q mi cliente protestó porque cuando el hace una factura, la guarda y la recupera las cantidades no coinciden entre la factura que ha impreso y la que esta guardada.

Ejemplifico:

Ahorita estoy debuggeando un programa en el cual yo escribo por ejemplo 8.52 en un DecimalSpin. Al acceder a su propiedad "value" para obtener el numero me agrega digitos

Código Delphi [-]
cantidad := spin_cant.value; {Escribi 3, obtengo 3}
precio := spin_precio.value;  {Escribi 8.52, obtengo 8.5217390006}
total := cantidad * precio; 
{De esta manera me regresa 25.5652170018
al momento de ponerlo en la factura utilizando un FormatFloat obtengo 25.57
pero si hacemos la multiplicacion original obtenemos 25.56 que es lo correcto}

Como pueden notar el error es de solo 0.01 pero en una factura con 10 o 20 productos hacen variaciones de 10 a 20 centavos.

Pensé que el problema podría ser el Control, sin embargo me repite el mismo problema con cualquier otro control para decimales.
De hecho hice otro experimento

Código Delphi [-]
var
 s1,s2 : string;
 tmp : single;
begin
 precio := spin_precio.value;  
 s1 := FormatFloat('###########0.00;-###########0.00;0',  precio);
 s2 := FormatFloat('###########0.00;-###########0.00;0',  cantidad);
 //Ahora si, en s2 tengo 8.52
 tmp := StrToFloat(s1) * StrToFloat(s2);
 //Otra vez, en lugar de obtener 25.56 obtengo 25.559999416
end;

No entiendo el motivo de este comportamiento con los decimales. Asi que les pido tengan la gentileza de darme un poco de ayuda para corregir este problema.

Muchas gracias de antemano.
Responder Con Cita