PDA

View Full Version : حاصل تقسیم دو عدد صحیح



Mrs.Net
شنبه 04 خرداد 1387, 16:31 عصر
double a=23, b=24;
double result=a/b;
این موضوع غیر قابل قبول هست. شاید من اشتباه میکنم!
چرا حاصل عبارت زیر باید صفر بشه؟!!

double result= 23 / 24;
چرا اگر متغیرها از نوع int باشند حاصل صفر میشه؟!

int a=23, b=24;
double resulrt=a/b;

ASKaffash
شنبه 04 خرداد 1387, 16:38 عصر
سلام
به این شکل بنویسید:


int a = 23, b = 24;
double resulrt = (double)a / (double)b;

Mrs.Net
شنبه 04 خرداد 1387, 17:03 عصر
من راه حل اینجوری نمیخوام. کلا چرا اینجوری هست؟!

reza.palang
شنبه 04 خرداد 1387, 17:41 عصر
این کد هیچ مشکلی نداره
فکر می کنم شما Result رو به int تبدیل کردی و اگر این باشه مسلما 0 میشه
برای من 0.958333333333333 نتیجه میده

Mahdi.Kiani
شنبه 04 خرداد 1387, 18:04 عصر
double a=23, b=24;
double result=a/b;این موضوع غیر قابل قبول هست. شاید من اشتباه میکنم!
چرا حاصل عبارت زیر باید صفر بشه؟!!

double result= 23 / 24;چرا اگر متغیرها از نوع int باشند حاصل صفر میشه؟!

int a=23, b=24;
double resulrt=a/b;

برای اینکه حاصل تقسیم دو عدد از نوع int یک عدد از نوع int می باشد. و تقسیم دو عدد int ، خارج قسمت را بر می گردونه که در مثال شما خارج قسمت صفر می باشد و هیچ ایرادی هم ندارد
حال اگر به شکل زیر بنویسید، نتیجه ای غیر از صفر خوئاهید گرفت


float a = 23f, b = 24f;
double result = a / b;

linux
شنبه 04 خرداد 1387, 18:48 عصر
این کد هیچ مشکلی نداره
فکر می کنم شما Result رو به int تبدیل کردی و اگر این باشه مسلما 0 میشه
برای من 0.958333333333333 نتیجه میده
مطمئن هستی با سی شارپ کد می نویسی؟!
فکر می کنم با ویبی تست کردی
توی سی شارپ حاصل تقسیم دو عدد صحیح برابر با یک عدد صحیح هست
در ویبی خود کامپایلر با توجه به یکسری پیش فرض ها تبدیلاتی را انجام می دهد.

Mrs.Net
شنبه 04 خرداد 1387, 18:58 عصر
برای اینکه حاصل تقسیم دو عدد از نوع int یک عدد از نوع int می باشد.اما این منطقی نیست! و بنظرم یک ضعف بحساب میاد

reza.palang
شنبه 04 خرداد 1387, 19:48 عصر
مطمئن هستی با سی شارپ کد می نویسی؟!
فکر می کنم با ویبی تست کردی
توی سی شارپ حاصل تقسیم دو عدد صحیح برابر با یک عدد صحیح هست
در ویبی خود کامپایلر با توجه به یکسری پیش فرض ها تبدیلاتی را انجام می دهد.


کاملا. و اینکه این 2 خط کد رو از همین صفحه کپی کردم. شما همه تست کنید.

Mahdi.Kiani
شنبه 04 خرداد 1387, 20:07 عصر
مطمئن هستی با سی شارپ کد می نویسی؟!
فکر می کنم با ویبی تست کردی
توی سی شارپ حاصل تقسیم دو عدد صحیح برابر با یک عدد صحیح هست
در ویبی خود کامپایلر با توجه به یکسری پیش فرض ها تبدیلاتی را انجام می دهد.

ظاهرا بعضی از دوستان خوب به کد اول و دوم اولین پست تاپیک خوب دقت نکردند.
در کد اول چون متغیر ها از نوع double هستند، نتیجه برابر با همون عدد 270 رقمی خواهد شد!!!




double a=23, b=24;
double result=a/b;

// result =0.958333333333333
ولی در کد دوم ، چون متغیر ها از نوع int هیتند، نتیجه برابر با 0 خواهد شد



double result = 23 / 24;
//result =0

linux
شنبه 04 خرداد 1387, 20:15 عصر
اما این منطقی نیست! و بنظرم یک ضعف بحساب میاد
احتمالا شما این دو خط کد را تست کردید


double a=23, b=24;
double result=a/b;

حالا برای اینکه ببنید در vb چه اتفاقی خواهد افتاد این دو خط کد را چک کنید


Dim i As Integer = 23
Dim j As Integer = 24
Dim r As Integer = i / j
TextBox1.Text = r

جواب 1 خواهد شد، در ویبی این دوتا عدد بر هم تقسیم می شوند و حاصل که یک عدد ممیزی هست رند شده در r قرار می گیرد.

linux
شنبه 04 خرداد 1387, 20:21 عصر
اما این منطقی نیست! و بنظرم یک ضعف بحساب میاد
وقتی شما هر دو متغیر مقسوم و مقسوم علیه را از نوع int تعریف می کنید خوب کاملا طبیعی هست که جواب هم یک int خواهد شد. حالا اگر یکی از اینها از نوع متغیر دیگر باشد دابل و فلوت و ... حاصل نیز از همان نوع خواهد شد.برای اطلاع بیشتر MSDN