Title: How to round a number correctly
Example/ Beispiel:
x:= Round(17.5) = x = 18
x:= Round(12.5) = x = 12
}
function DoRound(const X: Extended): Int64;
begin
Result := 0;
if X0 then
Result := trunc(X 0.5);
if Xthen
Result := trunc(X - 0.5);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(FormatFloat('0.00', DoRound(17.5))); // - 18
ShowMessage(FormatFloat('0.00', DoRound(12.5))); // - 13
//This rounds every value to 0.05 steps
//Rundet in 0.05 Schritten
ShowMessage(FormatFloat('0.00', Round(17.22 / 0.05) * 0.05)); // - 17.20
end;
{***Another function:***}
function RoundUp(Value: Extended): Int64;
procedure Set8087CW(NewCW: Word);
asm
MOV Default8087CW,AX
FNCLEX
FLDCW Default8087CW
end;
const
RoundUpCW = $1B32;
var
OldCW: Word;
begin
OldCW := Default8087CW;
try
Set8087CW(RoundUpCW);
Result := Round(Value);
finally
Set8087CW(OldCW);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(FormatFloat('0.00', RoundUp(19.32))); // - 19
end;