Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Redondeo de precios (https://www.clubdelphi.com/foros/showthread.php?t=38671)

miquellg 22-12-2006 17:40:15

Redondeo de precios
 
Hola foreros,
tengo una duda con el redondeo de precios en Euros, que no he conseguido resolver buscando por el foro, a ver si alguien lo sabe.
Debo redondear precios de artículos con 2 decimales pero éstos deben acabar siempre en 0 ó 5. Por ejemplo :

Precio 2,310€ -> retorno 2,30€
Precio 2,326€ -> retorno 2,35€
Precio 4,88€ -> retorno 4,90€

Gracias por la colaboración.
un saludo

Lepe 22-12-2006 18:02:56

Me extraña mucho que tengas que redondear el primer decimal. Yo siempre he visto que se redondee el segundo decimal por culpa del tercer decimal, pero nada más.

Hecha un vistazo a este hilo, seguro que te da info de como buscar en el foro con resultados positivos.

Yo por lo general uso el tipo Currency de delphi y no necesito redondear nada.

Saludos.

miquellg 22-12-2006 18:12:30

No es tan extraño Lepe, no te has fijado nunca que muchos precios de las tiendas siempre acaban en 5 o 0?
se trata de redondear al segundo decimal y éste a su vez, transformarlo en 5 o 0 según corresponda.

un saludo

Spynosa 24-12-2006 12:38:43

efectivamente las tiendas no quieren un precio de 5,78 por ejemplo por eso de las monedas de centimo.
yo uso la siguiente funcion que posiblemente sea rudimentaria pero me sirve:

Código Delphi [-]
function redondear50(num:double):double;
var f,R:double;
begin
   r:=int(num);
   f:= r+0.50;
   if num > f then
   begin
       f:=r+0.75;
       if f < num then result := r+1 else result := r+0.50;
   end else
   begin
       f:=r+0.25;
       if f < num then result := r+0.50 else result := r;
   end;

end;

Robert01 24-12-2006 14:39:19

En Argentina no hay ese problema conb el redondeo porque si no tienen las monedas no te las dan o si son valores pequeños te dan caramelos, jeje!

En las tiendas, etc los precios son por ejemplo 2.99, 30,90, 300,90 y así.

No obstante hay una ley que obliga a redondear a favor del cliente que se está empezando a aplicar

Saludos

miquellg 27-12-2006 15:27:33

Gracias a todos por la colaboración.
Spynosa, adapté tu función para redondear al segundo decimal (poniendo un 0 después de la coma decimal en todas las cifras) y funciona perfectamente.
un saludo

basti 27-12-2006 17:59:55

Ampliando un poco la solución, yo uso una función para redondear a cualquier valor, sea entero o decimal
Código Delphi [-]
  function Redondeo(precio, aproximacion : extended) : extended;
  begin
      if aproximacion <> 0 then
        precio := Round(precio / aproximacion) * aproximacion;
      result := precio;
  end;

En el parámetro Aproximacion, hay que pasarle la cantidad a la que se quiere aproximar, en tu caso sería 0.05.


La franja horaria es GMT +2. Ahora son las 13:48:52.

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