![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сравнение двух TDateTime ??? [D7]
Цукор5 © (2007-10-26 00:01:00)
private
hTime:DWord;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
hTime:=GetTickCount;
Timer1.Enabled:=True; // Timer1.Interval:=20;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var Q:DWord;
D,hDate:TDateTime;
begin
Q:=GetTickCount-hTime;
D:= Q / (1000 * 60 * 60 *24) ;
Label1.Caption:=DateToStr(D)+'__'+TimeToStr(D);
//
hDate:=EncodeTime(0,0,5,0);
Label2.Caption:=DateToStr(hDate)+'__'+TimeToStr(hDate);
if hDate=D then Windows.Beep(800,200);
end;
по непонятным причинам на одном ПК "событие" происходит, на втором нет.
Тоже самое если условиеhDate-D=0.
И только если условиеhDate-D<0, тогда срабатывает на обеих.
В чем причина ???
Сусл (2007-10-26 12:46:00) [1]
> [6] Германн © (26.10.07 01:01)
>
> > Сусл © (26.10.07 00:38) [5]
>
> Поздравляю, Дима! Ты вспомнил таки.
> :-)
тебе скушно?
Германн (2007-10-26 01:01:00) [2]
> Сусл © (26.10.07 00:38) [5]
Поздравляю, Дима! Ты вспомнил таки.
:-)
Сусл (2007-10-26 00:38:00) [3]почитай на www.delphikingdom.ru есть статья про вещественные числа
автор Антон Григорьев. По идее каждому эту статью надо прочесть.
точную ссылку не дам, сам ищи...
Юрий Зотов (2007-10-26 00:37:00) [4]Боже...
Цукор5 (2007-10-26 00:25:00) [5]2 Сусл © (26.10.07 00:04) [1]
>abs(hDate-D) < 0.0001
а нужно abs(hDate-D) < 0.00001!
Количеством нулей ошибся ;)
Цукор5 (2007-10-26 00:14:00) [6]2 Сусл ©
>или сравнивай abs(hDate-D) < 0.0001
Что-то этот вариант не работает.
Сусл (2007-10-26 00:04:00) [7]причина в том, что нельзя стравнивать числа с плавающей точкой равенством. это их особенности.
если с точностью до даты, то trunc сделай перед сравнением или сравнивай
abs(hDate-D) < 0.0001