PDA

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

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 (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.