Корректное округление чисел Оформил: DeeCo Автор: http://www.swissdelphicenter.ch ```{ The function Round of the Delphi doesn't work like it is usually expected. The odd numbera are rounded down and the even numbers up. Die Round Funktion in Delphi gibt normalerweise nicht die erwartete Zahl zurьck. Die ungeraden Zahlen werden abgerundet, die geraden aufgerundet 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;```
Проект Delphi World © Выпуск 2002 - 2024
Автор проекта: USU Software
Вы можете выкупить этот проект.