Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.012 c
5-1119712589
NewMaxNeo
2005-06-25 19:16
2006.01.01
НЕ могу найти модуль


14-1133991679
Reindeer Moss Eater
2005-12-08 00:41
2006.01.01
Идентифицировать исполнителей


4-1130430310
spyrytus
2005-10-27 20:25
2006.01.01
Доступ к паралельному порту под WinNT


11-1115879438
Thaddy
2005-05-12 10:30
2006.01.01
Menu bug


6-1127160013
нарка
2005-09-20 00:00
2006.01.01
idtcpclient как получить информацию об удаленном хосте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский