Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.01;
Скачать: CL | DM;

Вниз

Этот код вешает компьютер :   Найти похожие ветки 

 
BugFix   (2005-12-11 02:26) [0]

procedure TForm1.Button1Click(Sender: TObject);
var
 d1 : Double;
 Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
 d1 := 4.9099444267E+252;
 DecodeDateTime(d1, Year, Month, Day, Hour, Min, Sec, MSec);
 Caption := IntToStr(Year);
end;


Вопрос: как избежать?
Может есть какая другая функция DecodeDateTime ?


 
Джо ©   (2005-12-11 02:38) [1]

Ничего он не вешает, не выдумывай. И, кстати, нечего обманывать компилятор и подсовывать ему дикие числа в качестве даты и времени :)


 
Джо ©   (2005-12-11 02:43) [2]

Наводка. В типе TDateTime целая часть числа означает кол-во дней, прошедших с 30 декабря 1899. То число, которое ты задаешь, по-моему, намного превышает возраст Вселенной. Давай колись - откуда ты его взял?
;>


 
BugFix   (2005-12-11 02:44) [3]

Число было получено через EncodeDateTime(Year, Month, Day, Hour, Min, Sec, MSec);


 
Джо ©   (2005-12-11 02:48) [4]


>  [3] BugFix   (11.12.05 02:44)
> Число было получено через EncodeDateTime(Year, Month, Day,
> Hour, Min, Sec, MSec);

Показывай, как получил.


 
BugFix   (2005-12-12 01:31) [5]

Чего, никто не знает как избежать? Перевелись на форуме мастера?


 
Джо ©   (2005-12-12 01:47) [6]

Пока будешь в партизана играть, вряд ли кто чем поможет. Никому не интересно.


 
alex_*** ©   (2005-12-12 09:55) [7]

а в чем задача? перевести дикое число в дикую дату?


 
Sandman29 ©   (2005-12-12 10:41) [8]

Логически мысля, 10 в степени 250 не влезет в Integer :)
Присоединяюсь к Джо ©   (12.12.05 01:47) [6]


 
BugFix   (2005-12-13 06:32) [9]


> Sandman29 ©   (12.12.05 10:41) [8]
>
> 10 в степени 250 не влезет в Integer :)


Тогда пусть генерируется эксепшен, а не происходит зависание.
Или дайте функцию типа StrToIntDef.

Кстати, почему TDateTime - это TDateTime = type Double; ?


 
Джо ©   (2005-12-13 06:37) [10]

Никакого зависания и не происходит. Генерируется EInvalidOp.

> Кстати, почему TDateTime - это TDateTime = type Double;
> ?

Сделай свой компилятор, в котором TDateTime будем чем-то другим. По поводу того, как именно хранится дата/время в переменной этого типа в Делфи см. [2] и стандартную Справку.

> Или дайте функцию типа StrToIntDef.

Это крик души или персональное обращение к кому-либо?


 
Anatoly Podgoretsky ©   (2005-12-13 08:48) [11]

BugFix   (13.12.05 06:32) [9]
После долгих лет иследований в области время, программисты наконец пришли к тому, что это не целое, а таймлайн и решили измерять его в днях, начиная с фиксированой даты.


 
BugFix   (2005-12-14 01:42) [12]


> <Цитата>
>
> Anatoly Podgoretsky ©   (13.12.05 08:48) [11]
>
> BugFix   (13.12.05 06:32) [9]
> После долгих лет иследований в области время, программисты
> наконец пришли к тому, что это не целое, а таймлайн и решили
> измерять его в днях, начиная с фиксированой даты.
>


В результате разбирательства выяснилось, что причина в том, что иногда вместо даты попадается мусор.

Как его можно вычислить и отсечь? Есть какие нибудь функции проверки валидности?


 
Джо ©   (2005-12-14 02:03) [13]


>  [12] BugFix   (14.12.05 01:42)
> В результате разбирательства выяснилось,

Уже не хочется встревать... Я об этом спрашивал еще в [4] посте. Реакция была странной :(
---
Покажешь, наконец, откуда мусор туда попадает? Или [6]?


 
Сайбель Алексей ©   (2005-12-14 02:13) [14]

2 Джо © [13]
Вас упорно игнорируют и вы даже не обижаетесь :O)

2 BugFix
Совет: ведите диалоги с мастерами. Они не зря что-то српашивают, если вы вообще хотите ответ.


 
Джо ©   (2005-12-14 02:29) [15]


> [14] Сайбель Алексей ©   (14.12.05 02:13)

For the very last time, ну все к черту, все-равно дураком останешься.


 
Германн ©   (2005-12-14 02:52) [16]


> Джо ©   (14.12.05 02:29) [15]
>
>
> > [14] Сайбель Алексей ©   (14.12.05 02:13)
>
> For the very last time, ну все к черту, все-равно дураком
> останешься.


Раз останешься, два останешься... Глядь и цвет поменялся.


 
SergP ©   (2005-12-14 04:48) [17]


> Как его можно вычислить и отсечь? Есть какие нибудь функции
> проверки валидности?



procedure TForm1.Button1Click(Sender: TObject);
var
 d1 : Double;
 Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
 d1 := 4.9099444267E+252;

 if (d1<...) and (d1>...) then
 begin
 DecodeDateTime(d1, Year, Month, Day, Hour, Min, Sec, MSec);
 Caption := IntToStr(Year);
 end else Caption := "Это не дата, а извращение";

end;



 
Джо ©   (2005-12-14 04:50) [18]


>  [17] SergP ©   (14.12.05 04:48)

Осталось выявить рамки извращения, но тут даже Ломброзо бессилен :)


 
BugFix   (2005-12-15 01:42) [19]

Ну, и чего? Никто не знает размеров?


 
BugFix   (2005-12-15 01:47) [20]

Ну, и чего? Никто не знает размеров?


 
Германн ©   (2005-12-15 03:30) [21]


> BugFix   (15.12.05 01:47) [20]
>
> Ну, и чего? Никто не знает размеров?


Не, ну почему "Никто не знает размеров"?
Я знаю.
Размер обуви - 41. Размер одежды - 48. Размер воротника - 21. Что ещё интересует?


 
SergP ©   (2005-12-15 06:47) [22]


> BugFix   (15.12.05 01:42) [19]
> Ну, и чего? Никто не знает размеров?


Ты хочешь знать пределы когда начинается

>  Этот код вешает компьютер


?

Если да - определи экспериментально например методом дихотомии (делением пополам).

Либо возьми 2 даты которые ты считаешь пределами для твоего случая и не мучайся... Разве тебе нужны такие даты типа 1 января 3526 года?
Ну это конечно если твоя программа не расчитывает дату конца существования вселенной...


 
BugFix   (2005-12-16 01:53) [23]

> Если да - определи экспериментально

Пусть определят те, кто утверждают, что у них компьютер якобы не зависает на этом коде.


 
alex_*** ©   (2005-12-16 10:03) [24]

Пусть определят те, кто утверждают, что у них компьютер якобы не зависает на этом коде.
- им это на фиг не сдалось. Ведь у них комп не повисает....


 
Плохиш ©   (2005-12-16 10:41) [25]

Ветку пора в "Потрепаться"



Страницы: 1 вся ветка

Текущий архив: 2006.01.01;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.027 c
1-1133517420
DimLord
2005-12-02 12:57
2006.01.01
Вывод данных таблиц ы на печать


1-1133510286
Vladimir D Belousov
2005-12-02 10:58
2006.01.01
GetMem - надо ли инициализировать память?


3-1131647684
Canvas
2005-11-10 21:34
2006.01.01
Таблицы, файлы и TClientDataSet


1-1133612665
SergP.
2005-12-03 15:24
2006.01.01
Позиция Popupmenu. Как привязать к нижнему левому углу.


1-1133505011
denmin
2005-12-02 09:30
2006.01.01
Как в Rave привязать RvRenderRTF1 так чтобы я мог сохранить RTF?