PDA

View Full Version : مشکل در مقاسه دو متغیر زمانی؟؟؟؟؟



oghab
یک شنبه 15 آبان 1384, 18:25 عصر
سلام
حسابی گیج شدم. اصلا به عقل جور دار نمی آید. چندین بار چکش کردم!!!! صد تا label گذاشتم تا مقدار متغیرها در هر بار نشونم بده. تا بفهمم چرا نمیشه. هیچ مشکلی نداشت!!!!
من 3 تا متغیر از نوع زمان دارم. t,t1,t2
یه کد دارم


if (t>t1) and (t<t2) then
begin
s:=ADOQuery1.Fields[1].AsString ;
label9.Caption:='ggg';
end;

که الیته خط مربوط به label9 به خاطر اینه که ببینم وارد if میشه یا نه!
حالا من مقدار t را میدم : 05:00:00PM و مقدار t1 برابر 02:00:00PM و t2 برابر 09:00:00PM است.
وقتی قسمت ‍{(t>t1) and} را داخل کروشه گذاشتم اجرا شد. و با قسمت (t<t2) هیچ مشکلی نداشت!
کلی label گذاشتم تا مقدارهای t , t1, t2 را نشون بده. همه چیز درست بود!
این کد را نوشتم:


label10.Caption:='(t<t1)= '+BoolToStr(t<t1)+' (t1<t)= '+BoolToStr(t1<t)+' (t>t1)= '+booltostr(t>t1)+' (t=t1)= '+BoolToStr(t=t1);

میدونید مقدار label چقدر شد!!!!:


(t<t1)= -1 (t1<t)= 0 (t>t1)= 0 (t=t1)= 0


مگه مقدار بولین نباید یا 0 باشه یا 1 (false یا true) پس چرا این منفی 1 است؟ 1-
یعنی چه؟
تازه t=18:29:00 PM است و t1=02:00:00 PM است یعنی باید


(t>t1)=1

ولی این برعکس جواب میده!

اگر از


not(t>t1)

به نظرم عاقلانه نمیاد و در ضمن در یه مرحله دیگه باعث بروز اشتباه میشه!
حالا بگید من چیکار کنم؟
یه راه دیگه برای مقایسه دو متغیر زمانی بگید!
چک کردم وقتی t=06:40:00 PM و t2:=09:00:00 PM است
نتیجه این است:


(t<t2)= -1 (t2<t)= 0 (t>t2)= 0 (t=t2)= 0

در حالیکه


(t<t2)=1

درست است و در این صورت باید کد زیر اجرا شود.


if {(t>t1) and} (t<t2) then
begin
s:=ADOQuery1.Fields[1].AsString ;
label9.Caption:='hhh';
end;


ولی با همان -1 اجرا میشود!
یه راه دیگه برای مقایسه دو متغیر زمانی بگید!!!!!
من پاک گیج شدم! اصلا سر در نمیارم!
ممنونم

oghab
یک شنبه 15 آبان 1384, 19:44 عصر
سلام
نفهمیدم چرا مشکل داشت. نفهمیدم چرا کار نمی داد.
ولی مشکلم حل شد!
رکوردهای توی table ام را پاک کردم و دوباره از اول مقدار دادم. دوباره همون مقدارها را دادم. (t1,t2 را از تو table می گرفتنم)
حالا بی مشکل کار می کنه. بدون اشتباه! نمی دونم چی شد! ولی اینقدر سر برطرف کردنش وقت گذاشتمو! فسفر سوزوندم و کمر درد گرفتم. که حالا که حل شد دیگه حوصله ندارم فکر کنم چرا اشتباه میکرد!
شماها هم بی خیال
همگی موفق باشید!
:گیج:
---------------------------------
التماس دعا

MiRHaDi
دوشنبه 16 آبان 1384, 00:28 صبح
سلام
در مورد boolean که گفتی فقط بگم که اون مال C است ! که 0 و 1 میده ! نه دلفی
بقیش هم اگه مشکل داشتی بازم بگو
showmessage(booltostr(true)+booltostr(false));
یا علی

vcldeveloper
دوشنبه 16 آبان 1384, 02:21 صبح
مقادیر نوع TDateTime از نوع Double هستند و به صورت ترکیبی از تاریخ و ساعت ذخیره میشند. شما توجه ایی به تاریخ اون زمانها نکردید. اگر t1 = 2:00PM باشه و t = 1:00PM باشه، ولی تاریخ t مربوط به امروز باشه و تاریخ t1 مشخص نشده باشه (یعنی 30/11/1899) اون وقت همیشه t >t1 هست.