Ver la Versión Completa : Redondeo de precios
miquellg
22-12-2006, 17:40:15
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
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 (http://www.clubdelphi.com/foros/showthread.php?t=3951&highlight=bancario), 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:
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
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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.