PDA

View Full Version : اختلاف در نتيجه



behroz1387
سه شنبه 24 شهریور 1388, 14:53 عصر
دوستان عزيز با سلام
من در حال مقايسه فرمولهاي اكسل با سي شارپم
اما در فرمول زير نتيجه با هم متفاوت است
int(60.7 * 2 + 0.5)/2
doubel a = (int) (60.7 * 2 + 0.5 )/2;
اولي فرمولي است كه در اكسل نوشتم و نتيجه آن 60.5 شد دومي در سي شارپ نوشتم و نتيجه آن 60 شد اگه ممكنه كمك كنيد كه كد دوم در كجا اشتباه نوشتم
ممنونم

sara.f
سه شنبه 24 شهریور 1388, 15:06 عصر
دوستان عزيز با سلام
من در حال مقايسه فرمولهاي اكسل با سي شارپم
اما در فرمول زير نتيجه با هم متفاوت است
int(60.7 * 2 + 0.5)/2
doubel a = (int) (60.7 * 2 + 0.5 )/2;
اولي فرمولي است كه در اكسل نوشتم و نتيجه آن 60.5 شد دومي در سي شارپ نوشتم و نتيجه آن 60 شد اگه ممكنه كمك كنيد كه كد دوم در كجا اشتباه نوشتم
ممنونم
سلام.
من می دونم که زمانیکه نام یک نوع از داده را در پرانتز قرار میدیم داریم تبدیل نوع انجام میدیم ( اصطلاحش یادم رفته :ناراحت:)
در اینجا هم شما دارید مقدار بدست اومده از رابطه را در تبدیل به integer می کنید،
یعنی دارید قسمت اعشارش را حذف می کنید.

behroz1387
سه شنبه 24 شهریور 1388, 15:09 عصر
دوست عزيز چطوري اصلاحش كنم

sara.f
سه شنبه 24 شهریور 1388, 15:12 عصر
یادم اومد اومد، اصطلاحش type casting هست
یعنی یک داده را به نوعی دیگر تغییر قالب دادن.
حله؟!

sara.f
سه شنبه 24 شهریور 1388, 15:16 عصر
دوست عزيز چطوري اصلاحش كنم
برای اصلاح کردنش کافیه (int) را بردارید.
من فکر می کنم اگر در اکسل هم (int) می نوشتید همان جواب معادل #c را می داد.

Salar Ashgi
سه شنبه 24 شهریور 1388, 15:17 عصر
سلام ، در اکثر زبانهای برنامه نویسی وقتی عدد صحیحی بر عدد صحیح دیگر تقسیم

میشود ، نتیجه میشود قسمت صحیح عدد حاصل و قسمت اعشاری حذف میگردد که برای

اینکه این قسمت اعشاری حذف نشود ، از روش Type Casting استفاده میشود :

کد مورد نظر شما :



double a = ((double)((int)(60.7 * 2 + 0.5))) / 2;


موفق و پیروز باشید !!!

behroz1387
سه شنبه 24 شهریور 1388, 15:19 عصر
اما با برداشتن int جواب غلط مي شه من مي خواهم جوابم با اكسل يكي بشه ممنون مي شم اگه كمك كنيد

behroz1387
سه شنبه 24 شهریور 1388, 15:21 عصر
استادان محترم من مي خواهم اعمال رياضي داخل پرانتز را انجام دهد بعد عدد صحيح بدست آمده را بر دو تقسيم كنم

sara.f
سه شنبه 24 شهریور 1388, 15:25 عصر
استادان محترم من مي خواهم اعمال رياضي داخل پرانتز را انجام دهد بعد عدد صحيح بدست آمده را بر دو تقسيم كنم
ببین دوست عزیز اگر میخوای دقیقا 60.5 بدست بیاد ، باید اینطوری بنویسی


double a = ((int)(60.7 * 2 )/2)+ 0.5;

Salar Ashgi
سه شنبه 24 شهریور 1388, 15:28 عصر
اما با برداشتن int جواب غلط مي شه من مي خواهم جوابم با اكسل يكي بشه ممنون مي شم اگه كمك كنيد

جواب تکمیل شد !



double a = ((double)((int)(60.7 * 2 + 0.5))) / 2;

behroz1387
سه شنبه 24 شهریور 1388, 15:30 عصر
استاد گرامي من 60.5 مد نظرم نيست بلكه مي خوام همانطور كه نوشتم عدد صحيح انجام محاسبه رياضي داخل پرانتز را به عدد ديگري تقسيم كنم كه عدد بدست آمده در صورت اعشاري بودن اعشار آن را نشان دهد

sara.f
سه شنبه 24 شهریور 1388, 15:35 عصر
استاد گرامي من 60.5 مد نظرم نيست بلكه مي خوام همانطور كه نوشتم عدد صحيح انجام محاسبه رياضي داخل پرانتز را به عدد ديگري تقسيم كنم كه عدد بدست آمده در صورت اعشاري بودن اعشار آن را نشان دهد
منظورت کدوم استاد گرامیه؟!!!!!!!!!
من استاد گرامیه؟!! یا salar_cpp_cs استاد گرامیه؟!!!
به هر حال اگر من استاد گرامیه، که من آخرش متوجه نشدم ، مهم برات ترتیب معادلست یا جواب معادله.

Amir Oveisi
سه شنبه 24 شهریور 1388, 17:10 عصر
دوست عزیز شما به اینصورت باید بنویسید:
(int)(60.7 * 2 + 0.5) / 2d
دقت کنید که d بعد از 2 به این معنی هست که 2 رو به عنوان double در نظر بگیره. در حالت اول که شما نوشته بودید هر دو طرف عمل تقسیم int بودند و قطعا جواب هم int میشد. اما اگر طرف دوم را double کنید نتیجه نیز double خواهد بود. اینطور جواب 60.5 میاد.
به جای 2d میتونین (double)2 هم بنویسید.

موفق باشید

salehbagheri
سه شنبه 24 شهریور 1388, 22:05 عصر
دوستان عزيز با سلام
من در حال مقايسه فرمولهاي اكسل با سي شارپم
اما در فرمول زير نتيجه با هم متفاوت است
int(60.7 * 2 + 0.5)/2
doubel a = (int) (60.7 * 2 + 0.5 )/2;
اولي فرمولي است كه در اكسل نوشتم و نتيجه آن 60.5 شد دومي در سي شارپ نوشتم و نتيجه آن 60 شد اگه ممكنه كمك كنيد كه كد دوم در كجا اشتباه نوشتم
ممنونم



int(60.7 * 2 + 0.5)/2
doubel a = ((int) (60.7 * 2 + 0.5 ))/2;


احتمالا این طوری مشکلتون حل میشه!

Amir Oveisi
سه شنبه 24 شهریور 1388, 22:22 عصر
کد:

int(60.7 * 2 + 0.5)/2
doubel a = ((int) (60.7 * 2 + 0.5 ))/2;

احتمالا این طوری مشکلتون حل میشه!

1- با یک نگاه میشه فهمید که این پرانتزهای قرمز که اضافه کردید هیچ تاثیری در نتیجه نخواهند داشت چون که کاملا اضافه هستند و به احتمال بسیار زیاد در زمان کامپایل توسط کامپایلر نادیده گرفته خواهند شد.
مثل اینه که همچین چیزی نوشته باشید : ((2)) / 2

2- لطفا قبل از ارسال پست های مشابه اول خودتون نتیجه رو تست کنید بعد نسبت به ارسال پست اقدام کنید تا کسی که سوالی پرسیده سریع تر به جواب برسه و باعث سردرگمی نشه.

ممنون و موفق باشید

salehbagheri
چهارشنبه 25 شهریور 1388, 21:48 عصر
2- لطفا قبل از ارسال پست های مشابه اول خودتون نتیجه رو تست کنید بعد نسبت به ارسال پست اقدام کنید تا کسی که سوالی پرسیده سریع تر به جواب برسه و باعث سردرگمی نشه.

Oops !!!!

خوب به هر حال اشتباه شد! روزه گرفتن خیلی سرم فشار اورده!

منظورم این بود:



double a = (int)(60.7 * 2 + 0.5) / 2.0;