Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Redondeo por exceso y por aproximación??? (https://www.clubdelphi.com/foros/showthread.php?t=15870)

burasu 08-11-2004 12:59:13

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.

jafl1965 09-11-2004 00:57:00

¿Te sirve RoundTo?
Porque ceil también devuelve un entero.
Saludos.

burasu 09-11-2004 08:55:45

Pues no lo se jafl1965, le echaré un vistazo haber si me puede servir. Gracias.

burasu 09-11-2004 10:41:24

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.

jafl1965 09-11-2004 20:41:07

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,

burasu 10-11-2004 09:29:16

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 :D


La franja horaria es GMT +2. Ahora son las 09:32:56.

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