![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Откуда берется секунда TDataTime и Variant ????????? [D5, Win2k]
MVova © (2002-07-10 13:38:00)Всем привет.
Есть такой код:
var
D : TDateTime;
DV : Variant;
begin
D := 37447.44574;
DV := D;
Label1.Caption := DateTimeToStr(d);
Label2.Caption := DV;
Label3.Caption := FloatToStr(D);
Label4.Caption := FloatToStr(DV);
end;
после выполнения
Label1.Caption = 10.07.2002 10:41:51
Label2.Caption = 10.07.2002 10:41:52
Откуда 1 сек.?
Eugene Lachinov (2002-07-10 15:27:00) [1]Необходимо округлять или обрезать миллисекунды
Label1.Caption := FormatDateTime("HH:MM:SS:ZZZ", d);
10:41:51:936
Romkin (2002-07-10 15:20:00) [2]в варианте хранится extended, а дата - это double, вот при преобразовании и появляется ошибка округления
Delphi Help - Variant type conversions
MVova (2002-07-10 14:11:00) [3]Кирилл Усов
Смотря какой у тебя комп еще
Cel 1200 512Mb Win2000Pro
Еще посмотри в точности. Если точность 1с, то вопрос исчерпан
Где и как смотреть?
Кирилл Усов (2002-07-10 13:55:00) [4]Общеизвестно, что Variant - это очень медленный тип данных. Операции по его преобразованию занимают много времени(по сравнению с integer или string, например). Связано это с тем, что Variant - это есть vInteger, vString, vDateTime, vOLE(!!!) и др. вместе взятые.
Конечно, сомнительно, что это занимает столько времени, но проверить стоит.
Еще посмотри в точности. Если точность 1с, то вопрос исчерпан:) Хотя обычно точность до 1мс:( Смотря какой у тебя комп еще....
MVova (2002-07-10 13:54:00) [5]Это уже експеремент, реально наткнулся вот так:
function GetDateEditBuh(const DT,DID: WideString): TDateTime;
begin
adoGetDateEditBuh.ProcedureName := "DATEEDITBUH" + DT;
adoGetDateEditBuh.Parameters.Clear;
adoGetDateEditBuh.Parameters.CreateParameter("@RID",ftString,pdInput,16,DID);
adoGetDateEditBuh.Parameters.CreateParameter("@DateEditBuh",ftDateTime,pdOutput,0,0);
adoGetDateEditBuh.ExecProc;
Result := adoGetDateEditBuh.Parameters[1].Value;
та квот под отладчиком значкеие
adoGetDateEditBuh.Parameters[1].Value = 10.07.2002 10:41:52
так и должно быть
а DateTimeToStr(Result) = 10.07.2002 10:41:51
Как с этим боротся???