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;