Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не правильно работает MonthsBetween [D7, WinXP]


Страницы:   1 2 3 4

kyn66 ©   (2009-02-06 11:42:00) 

Добрый день. Использую RX компонент function MonthsBetween(Date1, Date2: TDateTime): Double;
Впервые пришлось его применить . Однако после применения обнаружил неверно выдаваемые результаты. Вот оригинальная функция:

function MonthsBetween(Date1, Date2: TDateTime): Double;
var
 D, M, Y: Word;
begin
 DateDiff(Date1, Date2, D, M, Y);
 Result := 12 * Y + M;
 if (D > 1) and (D < 7) then Result := Result + 0.25
 else if (D >= 7) and (D < 15) then Result := Result + 0.5
 else if (D >= 15) and (D < 21) then Result := Result + 0.75
 else if (D >= 21) then Result := Result + 1;
end;


У меня разница в датах 22 дня. Т.е. по идее функция перемещается на строку else if (D >= 21) then Result := Result + 1; и получается на выходе 1. Т.е. разница в датах = 1 мес. Это в корне неверно. 22 дня и 2 мес. Почему так? В чем дело? Как лечить?


Anatoly Podgoretsky   (2009-02-06 19:33:00) [1]

> Ega23  (06.02.2009 18:48:02)  [62]

Я в курсе, что в Дельфи функция неполная, да и Папа против.


Jeer   (2009-02-06 18:58:00) [2]


> Year mod 400


Ну вот, все таки добрался до модуля :)


> В смысле, что ничего кроме велосипеда?
> Дык, неудобно как-то, потертости будут.


Ну, кто видел велотрусы, тот поймет :)
Сестрам видеть это было невмоготу, а мы побоялись за..
В общем, около 10 км я и не оглядывался, потом резко в Жиздру охладиться.


Ega23   (2009-02-06 18:48:00) [3]


> Вероятность 1/10, поскольку еще есть и 4000, каждый 4000
> год невисокосный.


function IsLeapYear(Year: Word): Boolean;
begin
 Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;


Anatoly Podgoretsky   (2009-02-06 18:43:00) [4]

> Leonid Troyanovsky  (06.02.2009 18:07:56)  [56]

Каждая, и левая и правая.


Anatoly Podgoretsky   (2009-02-06 18:42:00) [5]


> Ну, все - забодали пацана.

Его не забодаешь, а вот он может, он же железобетонный!


Anatoly Podgoretsky   (2009-02-06 18:41:00) [6]

> Leonid Troyanovsky  (06.02.2009 17:33:51)  [51]

Вероятность 1/10, поскольку еще есть и 4000, каждый 4000 год невисокосный.


Leonid Troyanovsky   (2009-02-06 18:30:00) [7]


> Jeer ©   (06.02.09 18:24) [57]

> велосипедно неглиже

В смысле, что ничего кроме велосипеда?
Дык, неудобно как-то, потертости будут.

> Вместо стандартных 21-22 км/час втопил аж 25 в среднем на
> 100 км.

Неужель 100 км преследовали?

--
Regards, LVT.


Jeer   (2009-02-06 18:24:00) [8]


> по-братски


Интересно, а как по сестрински ?
Летом заехали в велосипедно неглиже в Шамординский монастырь - ох, вот я и узнал, как сестры горячи.
Вместо стандартных 21-22 км/час втопил аж 25 в среднем на 100 км.


Leonid Troyanovsky   (2009-02-06 18:07:00) [9]


> Anatoly Podgoretsky ©   (06.02.09 16:06) [44]

> А у нас перекуры по 31 минуты. Это ровно половина часа.

А первая или вторая?
А делите как: по-братски или по-справедливому?

--
Regards, LVT.


Ega23   (2009-02-06 18:00:00) [10]


> Огласите, пжлст, окончательную вероятность.


Да ну её  в это... В общем, кому надо - тот посчитает...  :)


Leonid Troyanovsky   (2009-02-06 17:53:00) [11]


> Плохиш ©   (06.02.09 17:44) [52]

> Хорошо вам, у вас уже рабочий день закончился...

А я успел еще и шираза южно-африканского 2004 года пригубить.
Весьма недурственно.

--
Regards, LVT.


Jeer   (2009-02-06 17:48:00) [12]


> Плохиш ©   (06.02.09 17:44) [52]
>
> Хорошо вам, у вас уже рабочий день закончился...


Более того - тяпница и у нассокращенный на час.
Чего сижу ?
Антонова слушаю - дома не дадут спиногрызы


Плохиш   (2009-02-06 17:44:00) [13]

Хорошо вам, у вас уже рабочий день закончился...


Leonid Troyanovsky   (2009-02-06 17:33:00) [14]


> Ega23 ©   (06.02.09 16:41) [49]

> Смысл такой, что каждый кратный ста год не является високосным,
>  но кратный 400 - является. Вроде так.

Огласите, пжлст, окончательную вероятность.

--
Regards, LVT.


Jeer   (2009-02-06 17:14:00) [15]

Ну, все - забодали пацана.
Он уже и не надеется прожить хотя бы неделю после выволочки в этой ветке, а вы ему тут про 400 лет по модулю :)


Ega23   (2009-02-06 16:41:00) [16]


> "Там" ещё что-то и с 100 лет связано, что видно из 1900.
>  Т.к. 1900 с 400 не связано :)))
> Но "там" связь с 400 всё-таки есть....
>


Смысл такой, что каждый кратный ста год не является високосным, но кратный 400 - является. Вроде так.


Johnmen   (2009-02-06 16:37:00) [17]


> Там ещё как-то с периодичностью в 400 лет связано. Типа,
>  1900 год - не високосный.

"Там" ещё что-то и с 100 лет связано, что видно из 1900. Т.к. 1900 с 400 не связано :)))
Но "там" связь с 400 всё-таки есть....


Ega23   (2009-02-06 16:21:00) [18]


> И в феврале тоже как повезет, вероятность 0,75


Меньше. Там ещё как-то с периодичностью в 400 лет связано. Типа, 1900 год - не високосный.
Ща проверю.

Ну да, так и есть
select cast(58 as datetime)
union all
select cast(59 as datetime)

                                                     
------------------------------------------------------
1900-02-28 00:00:00.000
1900-03-01 00:00:00.000

(2 row(s) affected)


Ega23   (2009-02-06 16:16:00) [19]


> А почему не 8, не 9, не 10???


Потому что в неделе - ровно 7 дней. Не бывает високосных недель.


Sergey13   (2009-02-06 16:14:00) [20]

> [44] Anatoly Podgoretsky ©   (06.02.09 16:06)

31 минута?!! Гаванские сигары с коньяком что ли? 8-)


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо