PDA

View Full Version : سوال: کار با متغیر دابل



vaheeed
پنج شنبه 21 دی 1391, 09:02 صبح
با سلام
نمیدونم چرا اینجوریه واقعا !!! نوشتم
if(a==0.2)
a رو دابل تعریف کردم و برابر 0.2 قرار دادم ولی این شرط برقرار نمیشه اگه همینو به صورت زیر بنویسم درست میشه
if(a.Tostring()=="0.2")
میشه راهنمایی کنید !!!!

Abbas Naghdi
پنج شنبه 21 دی 1391, 09:41 صبح
با سلام
نمیدونم چرا اینجوریه واقعا !!! نوشتم
if(a==0.2)
a رو دابل تعریف کردم و برابر 0.2 قرار دادم ولی این شرط برقرار نمیشه اگه همینو به صورت زیر بنویسم درست میشه
if(a.Tostring()=="0.2")
میشه راهنمایی کنید !!!!

حتما داری شوخی میکنی ... !
این کد داخل کامپیوتر من اجرا شد ... (شما متغییر و عدد رو به رشته تبدیل کردیت)
کد زیر به شما کمک میکنه ..

double a = 0;
if (a == 0.5) return;

danialafshari
پنج شنبه 21 دی 1391, 09:49 صبح
با سلام
نمیدونم چرا اینجوریه واقعا !!! نوشتم
if(a==0.2)
a رو دابل تعریف کردم و برابر 0.2 قرار دادم ولی این شرط برقرار نمیشه اگه همینو به صورت زیر بنویسم درست میشه
if(a.Tostring()=="0.2")
میشه راهنمایی کنید !!!!

سلام
مشکل شما این است که double عدد از نوع اعشاری است و نباید درون "" فرار گیرد! "" مال string است
کد:
double a = 2.5;
{
if (a == 2.5)
{
MessageBox.Show("True");
}
}
موفق باشی

vaheeed
شنبه 23 دی 1391, 21:30 عصر
وقتی بصورت رشته ای بررسی میکنم یعنی داخل "" قرار میدم درسته ولی وقتی بصورت عددی بررسی میکنم جواب نمیده !!!!!
شوخی نمیکنم واسه خودمم خیلی عجیب بود وقتی دیدم از این قسمت برنامه ام مشکل خوردم ، این کد دقیق برنامه است که قبل از رسیدن به شرط هم گفتم عدد رو بهم نشون بده دقیقا 0.6 بود که داخل شرط وارد نشد !!! دگه مجبوری بصورت رشته بررسی کردم فعلا کارم و راه بندازه
double checkTime(double time)
{
time = time - ((int)time);


if (time == 0 || time == 0.2 || time == 0.4 || time == 0.6 || time == 0.8)
{ return time; }
else
{
return time += 0.1;
}
}

the king
شنبه 23 دی 1391, 22:05 عصر
هیچگاه اعداد اعشاری ای که ممیز شناور دارند رو مستقیما با عدد دیگری با عملگر == مقایسه نکنید، ممیز شناور
تخمینی است، شرط کنید که اگر عدد مورد نظر بین فلان و بهمان بود، یا اختلاف بین دو عدد کمتر از فلان بود قبول است.
اون چیزی که تحت عنوان عدد نمایش داده میشه با داده داخلی فرق داره، اعداد زیادی هستند که موقع نمایش 1.0 هستند
اما عملا با هم فرق دارند. این مساله در مورد سیستم ممیز شناور کاملا عادی و طبیعی است. اگر نمی توانید با
این وضعیت کنار بیایید بجای double از decimal استفاده کنید، اعداد اعشاری decimal آخرشون m دارند، مثلا 12.45m

plus
یک شنبه 24 دی 1391, 00:38 صبح
در ادامه پاسخ دوستمون the king

const double Epsilon = 1e-5;
double a = 0;

if (Math.Abs(a - 0.5) < Epsilon) return;