elapsed := after - before;
decodetime(elapsed, Ehour, Emin, Esec, Emsec);
теперь Ehour:Emin:Esec.Emsec будет содержать истекшее время.
Это то, что я хотел. fStartWhen содержит дату/время начала процесса. (fStartWhen := NOW). OneSecond — константа, определенная как 1/24/3600. (Да, эта программа может выполняться для нескольких дней. Но даже самый быстрый P5 может не справиться с большим количеством данных!)
PROCEDURE
VAR
BEGIN
fLastUpdate := NOW
IF
Delta := fLastUpdate - fStartWhendoElapsedTime.Caption := FORMAT('%1. дней из %s', [INT(Delta),FORMATDATETIME('hh:nn:ss', FRAC(Delta))])
END
Математика
Как научить Delphi делать правильное округление дробных чисел?
Nomadic советует:
Целая коллекция способов -
Для решения этой проблемы мною написана функция, которую можно модифицировать для всех случаев. Смысл заключается в том, что рассматривается строка. После этого все проблемы с округлением снялись.
Function
{Zn-значение; Kol_Zn-Кол-во знаков после запятой}
Var
snl,s,s0,s1,s2:String
n,n1:Real;
nn,i:Integer;
begin
s:=FloatToStr(Zn);
if
s0 := Copy(s,1,Pos(',',s)+kol_zn-1);
s1 := Copy(s,1,Pos(',',s)+kol_zn+2);
s2 := Copy(s1,Pos(',',s1)+kol_zn,Length(s1));
n := StrToInt(s2)/100;nn := Round(n);
if
snl := '0,';
For
snl := snl+'1';
n1 := StrToFloat(Copy(s,1,Pos(',',s)+kol_zn))+StrToFloat(snl);
s := FloatToStr(n1);
if
end else
if
Result := StrToFloat(s1);
end else
end
Все-таки работа со строками здесь излишество -
function
{Precision : 1 - до целых, 10 - до десятых, 100 - до сотых...}
var
ScaledFractPart, Temp : Double;
begin
ScaledFractPart := Frac(X)*Precision;
Temp := Frac(ScaledFractPart);
ScaledFractPart := Int(ScaledFractPart);
if
if
RoundEx := Int(X) + ScaledFractPart/Precision;
end
Разное
Генерация еженедельных списков задач
Мне необходима программа, которая генерировала бы еженедельные списки задач. Программа должна просто показывать количество недель в списке задач и организовывать мероприятия, не совпадающие по времени. В моем текущем планировщике у меня имеется 12 групп и планы на 11 недель.
Мне нужен простой алгоритм, чтобы решить эту проблему. Какие идеи?
Вот рабочий код (но вы должны просто понять алгоритм работы):
unit
interface
uses
type
ListBox1: TListBox;
Edit1: TEdit;
Button1: TButton;