Форум: "Начинающим";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];
ВнизYearsBetween Найти похожие ветки
← →
учащийся (2008-12-04 17:53) [0]Почему функция неправильно округляет
YearsBetween(StrToDate("1.01.2008"), StrToDate("1.01.2009"))
← →
учащийся (2008-12-04 17:56) [1]Возвращает 0
← →
Palladin © (2008-12-04 17:58) [2]лично у меня - 1
← →
учащийся (2008-12-04 18:04) [3]не тот случай привел. Вот возвращается 0.
procedure TForm1.FormCreate(Sender: TObject);
var
y: Integer;
begin
y := YearsBetween(StrToDate("4.10.2008"), StrToDate("4.10.2009"));
ShowMessageFmt("%d", [y]);
end;
Хотя заметил, что перед округлением (Trunc) в самой фуекции приходит значение 1.00. Но почему оно округляется до 0 непонятно.
← →
Palladin © (2008-12-04 18:23) [4]
> Хотя заметил, что перед округлением (Trunc) в самой фуекции
> приходит значение 1.00
хто сказал... там приходит 0 с хвостиком, вот и хвостик оттрункивается...
← →
учащийся (2008-12-04 18:27) [5]Будет ли верно, во всех случаях, если я заменю Trunc на Round ...
← →
KilkennyCat © (2008-12-04 18:28) [6]Где ты собираешься менять? В исходниках? Тогда нет.
А если просто подумать?
Между твоими датами действительно 0 лет. Функция не врет.
сколько целых чисел между 1 и 2?
← →
Palladin © (2008-12-04 18:30) [7]Думаю нет. Как видишь из исходников количество дней делится на среднее количество дней в году, а это значит, что при определенных обстоятельствах ты можешь получить увеличение фактического количества лет. Вообще, рекомендую написать свою функцию.
← →
Palladin © (2008-12-04 18:31) [8]
> Между твоими датами действительно 0 лет. Функция не врет.
> сколько целых чисел между 1 и 2?
ага, то естьYearsBetween(StrToDate("1.01.2008"), StrToDate("1.01.2009"))
функция врет :)
← →
Германн © (2008-12-04 18:33) [9]Лучше сначала правильно сформулировать задачу.
← →
учащийся (2008-12-04 18:34) [10]
> ага, то есть YearsBetween(StrToDate("1.01.2008"), StrToDate("1.
> 01.2009")) функция врет :)
Но ведь возвращает 1 - то, что требуется
← →
Palladin © (2008-12-04 18:35) [11]
> учащийся (04.12.08 18:34) [10]
да я не тебе, а KilkennyCat
← →
KilkennyCat © (2008-12-04 18:36) [12]
> Palladin ©
не врет. 0.
Полный год, а выдает функция именно полный год, будет между 23:59:59 31.12.2007 и 00:00:00 01.01.2009
← →
KilkennyCat © (2008-12-04 18:37) [13]
> Но ведь возвращает 1
где она такое возвращает?
← →
учащийся (2008-12-04 18:39) [14]
> где она такое возвращает?
Я имел ввиду если переписать:
function _YearsBetween(const ANow, AThen: TDateTime): Integer;
begin
Result := Round(YearSpan(ANow, AThen));
end;
← →
Германн © (2008-12-04 18:40) [15]В [0] количество дней между датами на один день больше за счет 29 февраля.
← →
KilkennyCat © (2008-12-04 18:41) [16]тогда она может выдать и 56парпал45№
мы либо говорим о стандартной функции модуля DateUtils, либо фантазируем дальше?
← →
KilkennyCat © (2008-12-04 18:43) [17]
> Германн © (04.12.08 18:40) [15]
?
← →
Anatoly Podgoretsky © (2008-12-04 19:28) [18]Формула подсчета относительная, по этому говорить о точности не приходится. Это же относится и к другим Between функциям.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.01.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c