PDA

View Full Version : سوال: Cast نشدن وقتی که پرانتز هست



irpersian20
دوشنبه 07 مرداد 1392, 16:41 عصر
سلام
چرا cast نمیکنه به double ??????

sum += d * (double)(4/x) ;


اگر پرانتز بردارم درست میشه

sum += d * (double)4/x ;

llMMDll
دوشنبه 07 مرداد 1392, 16:51 عصر
سلام
نوع داده sum که قرار دادید نباید چیزی به غیر از double باشد و اگر هست یک cast دیگر نیاز دارید

irpersian20
دوشنبه 07 مرداد 1392, 17:10 عصر
سلام
نیست.همان double است. گیر تو پرانتز است وقتی بزارم دیگه اعشار نمیزنه

Mahmoud.Afrad
دوشنبه 07 مرداد 1392, 17:12 عصر
در حالت اول 4(سمت چپ تقسیم) عدد صحیحه پس حاصل تقسیم عدد صحیح خواهد بود. باید به طریقی 4 رو به عنوان عدد اعشاری بشناسانی که در حالت دوم 4 به double تبدیل میشه و حاصل تقسیم هم double خواهد شد.

MiniMicro
دوشنبه 07 مرداد 1392, 17:39 عصر
من فکر میکنم در حالت اول کامپایلر درگیر مباحث تقدم عملگر ها میشه که از این دو پرانتز سمت چپ ترین پرانتز اول اجرا میشه و چون هیچ عددی بعد از پرانتز وجود نداره کاری از پیش نمیبره و در پرانتز دوم 4 تقسیم بر عدد صحیح میشه که نتیجه یه عدد صحیح خواهد بود و مسلما sum هم مقدار صحیح به خودش میگیره ولی در حالت دوم کاملا درسته 4 تبدیل به 4.00 میشه و نتیجه هم درست خواهد بود.
اگر اشتباه فکر میکنم دوستان اصلاح کنند...

irpersian20
دوشنبه 07 مرداد 1392, 18:32 عصر
ممنو ن این جی؟
p =Math.Pow(i,2);
بهم میگه دابل نمیتونم به int تبدیل کنم! بالای سر این دستور هم یک حلقه فور گذاشتم.مگر توان به اعشار هم میرسه؟
for (int i = 1; i <= 500; i++)
{
p = Math.Pow(i,2);

MiniMicro
دوشنبه 07 مرداد 1392, 18:52 عصر
علتش به خاطر اینه که متغییر p از نوع int هست ولی ورودی هایی که تابع pow میگیره به صورت double دریافت میشه و نتیجه هم به صورت double برگردونده میشه و چون شما دارید نتیجه رو داخل متغییری از نوع int قرار میدید خطا میگیره...

ali_hojati_00
دوشنبه 07 مرداد 1392, 18:53 عصر
باید حدس بزنیم Type هایی که استفاده کردی چیه ؟:قهقهه: (خوب یک تیکه کد کامل قرار بده:بامزه:)

Mahmoud.Afrad
دوشنبه 07 مرداد 1392, 21:48 عصر
من فکر میکنم در حالت اول کامپایلر درگیر مباحث تقدم عملگر ها میشه که از این دو پرانتز سمت چپ ترین پرانتز اول اجرا میشه و چون هیچ عددی بعد از پرانتز وجود نداره کاری از پیش نمیبره و در پرانتز دوم 4 تقسیم بر عدد صحیح میشه که نتیجه یه عدد صحیح خواهد بود و مسلما sum هم مقدار صحیح به خودش میگیره ولی در حالت دوم کاملا درسته 4 تبدیل به 4.00 میشه و نتیجه هم درست خواهد بود.
اگر اشتباه فکر میکنم دوستان اصلاح کنند...
بخش اول رو اشتباه گفتید. در حالت اول حاصل پرانتز که یک عدد صحیحه به double تبدیل میشه پس در نهایت حاصل از نوع double خواهد بود.

ممنو ن این جی؟
p =Math.Pow(i,2);
بهم میگه دابل نمیتونم به int تبدیل کنم! بالای سر این دستور هم یک حلقه فور گذاشتم.مگر توان به اعشار هم میرسه؟
for (int i = 1; i <= 500; i++)
{
p = Math.Pow(i,2);
بله حاصل میتونه اعشاری هم باشه مثلا کافیه یک عدد اعشاری رو به توان دو برسونید.