Ver Mensaje Individual
  #6  
Antiguo 10-11-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Reputación: 22
burasu Va por buen camino
Talking Encontré la solución.

Ya he encontrado una forma que creo es la correcta para hacer el redondeo en estos casos. De todas formas gracias por tu ayuda jafl1965.

Voy a poner el código para aquellos que les pueda interesar.

Código:
      Mascara_Precio := '#,###,##0.' + StringOfChar('#',Decimales.Text-1) + '0';
      Num_Decimal :=  StrToFloat('0,' + StringOfChar('0',StrToInt(Decimales.Text) -1) + '1');

      if Redondeo = 0 then          // Por Exceso
            Redondear := Round(Precio_Tarifa / Num_Decimal + 0.49) * Num_Decimal
      else                          // Por Aproximación
            Redondear := FormatFloat(Mascara_Precio, Precio_Tarifa);
Y ahora lo explico ok? En primer lugar, Num_Decimal es una variable Double en la cual incluyo un valor de tipo 0.01 o 0.001, según los decimales en los que quiera formatear el valor. Si lo quiero formatear a 2 pues creo el valor 0.01 si lo quiero a tres pues entonces 0.001, etc...

Tambien creo el formato de la masaara para generar el redondeo por aproximación. Y ya está simplemente debo aplicar los calculos mostrados en pantalla para según los casos que sean.

Para aquellos que no sepan la diferencia entre un redondeo u otro les voy a poner un ejemplo, si tengo el valor 7.337 y lo quiero redodnear a 2 decimales, en ambos casos me devolverá el valor 7.34, pero en el caso que el valor sea 7.333, en el de aproximación el resultado será 7.33 y en el de exceso el valor será 7.34. Como veis la diferencia a largo plazo se nota.

Bueno espero que esto le pueda servir a alguien más aparte de a mí. (Por fin me siento productivo en el foro, aunque sea respondiendome a mi mismo
Responder Con Cita