Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  96

•  TDictionary Custom Sort  3 293

•  Fast Watermark Sources  3 043

•  3D Designer  4 798

•  Sik Screen Capture  3 293

•  Patch Maker  3 512

•  Айболит (remote control)  3 609

•  ListBox Drag & Drop  2 969

•  Доска для игры Реверси  81 415

•  Графические эффекты  3 897

•  Рисование по маске  3 209

•  Перетаскивание изображений  2 592

•  Canvas Drawing  2 711

•  Рисование Луны  2 540

•  Поворот изображения  2 145

•  Рисование стержней  2 150

•  Paint on Shape  1 556

•  Генератор кроссвордов  2 212

•  Головоломка Paletto  1 754

•  Теорема Монжа об окружностях  2 192

•  Пазл Numbrix  1 675

•  Заборы и коммивояжеры  2 046

•  Игра HIP  1 270

•  Игра Go (Го)  1 219

•  Симулятор лифта  1 462

•  Программа укладки плитки  1 204

•  Генератор лабиринта  1 534

•  Проверка числового ввода  1 339

•  HEX View  1 481

•  Физический маятник  1 347

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Корректное округление чисел



Оформил: DeeCo

{ 
  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;







Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте