A função Math.RoundTo do Delphi não faz o arredondamento correto de acordo com o modelo Bankers’s Rounding (diferente do que está no Help). Isso se deve por causa do uso interno de varáveis de tipo flutuante. Segue abaixo uma versão dessa função que trabalha somente com variáveis do tipo Currency e por isso funciona corretamente.
function RoundTo(const AValue: Currency; const ADigit: TRoundToRange): Currency; var LFactor: Extended; rmOrig: TFPURoundingMode; begin LFactor := IntPower(10, ADigit); Result := Round(AValue / LFactor) * LFactor; rmOrig := GetRoundMode(); if rmOrig <> rmNearest then begin SetRoundMode(rmNearest); Result := Round(Result / LFactor) * LFactor; SetRoundMode(rmOrig); end; end;