É comum na vida do programado deparar-se com situações em que necessite arredondar um determinado valor, ou utilizando o arredondamento para cima ou o arredondamento do banqueiro e ainda definir a quantidade de casas decimais, isso se for ter casas decimais. O que alguns não sabem é que o Delphi oferece suporte para estas formas de arredondamento, basta um pouco de dedicação para entendermos melhor a forma de configurar e o comportamento dessas rotinas.
São elas: Round(), RoundTo(), SimpleRoundTo(), SetRoundMode() e GetRoundMode().
Abordarei agora cada uma de forma conceitual e prática:
- function Round(X: Real): Int64;
A função Round retorna um valor inteiro arredondado para o número inteiro mais próximo do valor passado como parâmetro. Ela utiliza por padrão o método de arredondamento do banqueiro(ver nota).

Parâmetros:
X: Valor a ser arredondado.

Exemplos:
Round(12.6); //retorna 13
Round(13.4); //retorna 13
Round(13.5); //retorna 14
Round(14.5); //retorna 14
Round(15.5); //retorna 16

Nota:  Para maiores informações sobre o método de arredondamento do banqueiro ver “Rotinas matemáticas para manipulação numérica”.
Nota 1:  O resultado pode ser diferente se a forma como a FPU(Float Point Unit) lida com questões de arredondamento for alterada através da função SetRoundMode.

- function RoundTo(const Avalue: Extended; const Adigit: TroundToRange): Extended;
O que difere a função RoundTo da Round é o fato de podermos arredondar números com casas decimais. Também utiliza o "arredondamento do banqueiro".

Parâmetros:
Avalue: Valor a ser arredondado.
Adigit: Na prática é a quantidade de dígitos que se deseja arredondar Avalue. Por exemplo, se você deseja arredondar um valor que possui três casas decimais para um novo valor com duas casas decimais, então informe nesse parâmetro o valor -2.
Adigit aceita valores entre -37 a 37(inclusive).

Exemplos:
//retorna 1235000
RoundTo (1.234, -2); //retorna 1.23
RoundTo (1.235, -2); //retorna 1.24
RoundTo (1.245, -2); //retorna 1.24

- function SimpleRoundTo(const AValue: Single(Double ou Extended); const ADigit: TRoundToRange = -2): Single(Double ou Extended);
A função SimpleRoundTo arredonda um valor real para um determinado dígito ou potência de dez.
Utiliza o "arredondamento aritmético assimétrico", ou seja, aquele que aprendemos na escola, onde arredondamos para cima os valores terminados em 5,6,7,8 e 9 e para baixo os terminados em 1,2,3,4.

Parâmetros:

Avalue: Valor a ser arredondado.
Adigit: Na prática é a quantidade de dígitos que se deseja arredondar Avalue. Por exemplo, se você deseja arredondar um valor que possui quatro casas decimais para um novo valor com três casas decimais, então informe nesse parâmetro o valor -3. O valor default de Adigit é -2.

Exemplos:
//retorna 1235000
SimpleRoundTo (1.234, -2); //retorna 1.23
SimpleRoundTo (1.235, -2); //retorna 1.24
SimpleRoundTo (-1.235, -2); //retorna - 1.23

-function SetRoundMode(const RoundMode: TFPURoundingMode): TFPURoundingMode; Define a forma com que a FPU irá lidar com questões de arredondamento.

 
Modos de arredondamento:
Valor
Significado
rmNearest
Arredonda para o valor mais próximo e é o modo default.
rmDown
Arredonda para baixo.
rmUp
Arredonda para cima.
rmTruncate
Trunca o valor.


Exemplos:

program Project2;
uses
  math, sysutils, clipbrd;

var
  s: string;

procedure trythis(sMode: string);
  procedure tryone(d: double);
  begin
    s := s + Format(''%1.3f   %d%s'', [d, Round(d), #13 + #10]);
  end;

begin
  s := s + #13#10 + sMode + #13#10;
  tryone(0.50);
  tryone(1.50);
  tryone(2.45);
  tryone(2.50);
  tryone(2.55);
  tryone(3.45);
  tryone(3.50);
  tryone(3.55);
end;

begin
  s := inttostr(integer(GetRoundMode));
  SetRoundMode(rmNearest);
  trythis(''nearest'');
  SetRoundMode(rmDown);
  trythis(''down'');
  SetRoundMode(rmUp);
  trythis(''up'');
  SetRoundMode(rmTruncate);
  trythis(''trunc'');
  Clipboard.Astext := s;
end.

Execute o programa, depois dê um Ctrl+C no Bloco de Notas. Agora analise os resultados comparando com cada modo de arredondamento.

- function GetRoundMode: TFPURoundingMode;

Retorna a forma com que a FPU lida com questões de arredondamento.

Exemplo:
if (GetRoundMode <> rmNearest) then
begin
  if (MessageDlg(''Modo de arredondamento Alterado!'' + #10#13 +
    ''Deseja voltar configuração Default?'', mtConfirmation, [mbYes, mbNo], 0)
    = mrYes) then
   begin
      SetRoundMode(rmNearest);
   end;
end;

É isso, qualquer dúvida ou sugestão é só deixar um comentário ou me enviar um e-mail.
Até a próxima e obrigado.