Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 21
burasu Va por buen camino
Question Redondeo por exceso y por aproximación???

Hola amigos, en la aplicación que estoy desarrollando debo realizar sobre una catidad generada un redondeo por exceso o bien por aproximación según halla el usuario marcado una opción u otra.

He estado buscando en el foro y en la ayuda para así evitar tener que hacer esta pregunta, pero no he encontrado solución a lo que yo quería.

He deducido que debo utilizar la función Round para el redondeo por exceso, pero y para el redondeo por aproximación??? La función más parecida es Trunc, pero esta devuelve un valor entero y yo estoy trabajando con valores con decimales.

Gracias por la ayuda de antemano.
Responder Con Cita
  #2  
Antiguo 09-11-2004
jafl1965 jafl1965 is offline
Miembro
 
Registrado: may 2003
Ubicación: Morelia, México
Posts: 170
Poder: 21
jafl1965 Va por buen camino
¿Te sirve RoundTo?
Porque ceil también devuelve un entero.
Saludos.
Responder Con Cita
  #3  
Antiguo 09-11-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 21
burasu Va por buen camino
Pues no lo se jafl1965, le echaré un vistazo haber si me puede servir. Gracias.
Responder Con Cita
  #4  
Antiguo 09-11-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 21
burasu Va por buen camino
jafl1965, esa función es valida en Delphi 5???? Me he dado cuenta que no he especificado la versión de delphi que estoy utilizando.
Responder Con Cita
  #5  
Antiguo 09-11-2004
jafl1965 jafl1965 is offline
Miembro
 
Registrado: may 2003
Ubicación: Morelia, México
Posts: 170
Poder: 21
jafl1965 Va por buen camino
No sabría decirte, trabajo con Delphi 6. Pero mira a ver, porque esta función está en la Unit MATH, declarala en el Uses y chécalo.
Saludos,
Responder Con Cita
  #6  
Antiguo 10-11-2004
burasu burasu is offline
Miembro
 
Registrado: may 2003
Ubicación: Cádiz - España
Posts: 183
Poder: 21
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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:15:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi