Форум: "Начинающим";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
ВнизEndOfTheDay... Найти похожие ветки
← →
istok (2011-04-23 00:08) [0]функция EndOfTheDay и даже самописный, более мягкий и неточный вариант в виде RecodeTime(AValue, 23, 59, 59, 0) иногда возвращают не конец переданного дня, а начало следующего...
не могу понять в чем дело, может если где-то в коде используется real а не datetime (который есть более большой тип extended) то часть мантиссы может обрезаться и день округлится до слудеющего дня??
причем этот глюк то есть, то нет.. какие-то особенности работы с плавающей запятой?
← →
Anatoly Podgoretsky © (2011-04-23 00:10) [1]> istok (23.04.2011 00:08:00) [0]
Округление
← →
istok (2011-04-23 00:29) [2]я сам округление точно не использую, делфи что, сама иногда может округлить такое число (ессно там много девяток в мантиссе..)??
← →
ов (дом) (2011-04-23 01:19) [3]
> какие-то особенности работы с плавающей запятой?
>
вероятно, Антона Григорьева почитайте, погуглите
delphi нет под рукой, а если так примерно написать?
EndOfTheDay2(in:TDAteTime):TDAteTime;
result := TdateTime(StartOfTheDay(in) + 1 - 1/(60*60))
← →
Германн © (2011-04-23 02:03) [4]
> EndOfTheDay... [D7]
>
> istok (23.04.11 00:08)
>
> функция EndOfTheDay и даже самописный, более мягкий и неточный
> вариант в виде RecodeTime(AValue, 23, 59, 59, 0) иногда
> возвращают не конец переданного дня, а начало следующего.
> ..
>
Или я чего-то не понял, или кто-то из нас двоих бредит. Думаю, что всё-таки вы. :)
P.S. И не надо будить Антона Григорьева!
← →
ов (дом) (2011-04-23 12:28) [5]оказывается, и футболист есть такой 6)
"Неочевидные особенности вещественных чисел"
вот как
> result := TdateTime(StartOfTheDay(in) + 1 - 1/(24*60*60))
т.е. от следующего дня отнять секунду
← →
Ega23 © (2011-04-23 12:33) [6]
Result := IncMillisecond(StartOfTheDay(DateIn) + 1, -1);
← →
sniknik © (2011-04-23 13:22) [7]>
Result := IncMillisecond(StartOfTheDay(DateIn) + 1, -1);
проверка... ;)procedure TForm1.Button1Click(Sender: TObject);
function Foo(DateIn: TDateTime): Single;
begin
result:= IncMillisecond(StartOfTheDay(DateIn) + 1, -1);
end;
begin
ShowMessage(DateTimeToStr(Foo(Now())));
end;
p.s. ничего не поможет, т.к. проблема вовсе не в том что стандартные функции "глючат"... а где то рядом.
← →
Ega23 © (2011-04-23 13:28) [8]
function Foo(DateIn: TDateTime): Single;
С фига-ли Single-то? Замени на TDateTime и будет тебе щщасте
← →
sniknik © (2011-04-23 13:32) [9]> С фига-ли Single-то?
а фига-ли EndOfTheDay не работает? вот это пример. щщасте с TDateTime нужно не мне, а автору.
← →
Ega23 © (2011-04-23 13:42) [10]
> а фига-ли EndOfTheDay не работает
А это "родная" функция что-ли?
Если честно - никогда не пользовался. Да и StartOfTheDay никогда не использовал, всегда Trunc писал.
← →
Inovet © (2011-04-23 13:42) [11]> [7] sniknik © (23.04.11 13:22)
> что стандартные функции "глючат"... а где то рядом.
Так известно же, что десятичное представление точно не соответсвует двоичному. И про эти функции в той или ещё в одной статье про округление было сказано.
← →
Anatoly Podgoretsky © (2011-04-23 14:24) [12]> Inovet (23.04.2011 13:42:11) [11]
А я всегда X < StartOfTheDay + 1 или Trunc(AnyDate) + 1
Никаких проблем с округлением
← →
Anatoly Podgoretsky © (2011-04-23 14:27) [13]Особенно на MS SQL где точность всего 3 мс
← →
Ega23 © (2011-04-23 14:45) [14]
> Особенно на MS SQL где точность всего 3 мс
Там не просто 3 ms, там строго окончание datetime 0, 3 и 7.
← →
istok (2011-04-23 15:37) [15]
> > Особенно на MS SQL где точность всего 3 мс
>
> Там не просто 3 ms, там строго окончание datetime 0, 3 и
> 7.
именно в него потом передаю эти даты для фильтрации!! и получаю лишние данные...
так что использовать наверняка для ms sql?
и получается что вариант с RecodeTime(AValue, 23, 59, 59, 0) должен был работать?
← →
Anatoly Podgoretsky © (2011-04-23 16:46) [16]> istok (23.04.2011 15:37:15) [15]
Ты чего не читатель?
Я же написал, использовать отношение меньше и никаких ошибок
← →
sniknik © (2011-04-23 18:15) [17]> так что использовать наверняка для ms sql?
ms sql 2008 + расширенный тип даты (читал там есть, но т.к. не стоит/не использовал, то конкретики не знаю) - variant в передаче значений, т.к. D7, и будет приводится к ближайшему типу с ограничениями.
> Я же написал, использовать отношение меньше и никаких ошибок
так он может не сравнивает, может само значение сохраняет с точностью "тютелька в тютельку"...
← →
Anatoly Podgoretsky © (2011-04-23 18:29) [18]Его партизанские замашки, то его проблема.
← →
ов (дом) (2011-04-24 00:00) [19]
> StartOfTheDay никогда не использовал, всегда Trunc писал.
я тоже, пока не нарвался на вопли о том что , дескать, хочу время, а ты мне число суешь. И довольно нечитаемо переубедить было через явное приведение.
> именно в него потом передаю эти даты для фильтрации!! и
> получаю лишние данные...
не тут собака порылась, явно
там миллисекунд, а тут целая секунда..
← →
Германн © (2011-04-24 01:08) [20]
> не тут собака порылась, явно
> там миллисекунд, а тут целая секунда..
>
Где тут "целая секунда"?
← →
ов (дом) (2011-04-24 08:19) [21]явно отнять одну секунду - будет одна секунда
← →
sniknik © (2011-04-24 10:36) [22]> и получается что вариант с RecodeTime(AValue, 23, 59, 59, 0) должен был работать?
вот тут - секунда... причем вполне рабочий вариант даже с простым временем в mssgl с его дискретностью в миллисекундах (это запишется точно), правда есть вероятность потерять значения... (их есть еще целых 3 между 59 сек и 0 следующего дня)
> не тут собака порылась, явно
она там явно порылась даже не в одном месте... кучки свои закапывала... :)
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.07.31;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c