محدودیت کار با عددهای صحیح :
محدودیت اصلی کِه در کار با عددهای صحیح هست این می باشد کِه شُما نمیتونین عددی داشته باشین کِه دارای بخش اعشاری باشه. مثلا استِفاده از کُد زیر باعث ایجاد error در زمان کامپایل بَرنامه میشه :
int intNumber = 34;
intNumber *= 10.234;
اجرای بَرنامه بالا به علت خطایی کِه در بخش کامپایل به وجود می آید متوقف میشه به دلیل اینکه متغیّر intNumber از نوع عدد صحیح می باشد و شُما نمیتونین اون را در حالت عادی در یک عدد اعشاری ضرب کنین .
در تقسیم دو عدد هم اگه بخواهید یک عدد صحیح را بر یک عدد اعشاری تقسیم کنین،با خطایی شبیه حالت جمع رو به رو میشوید . ولی کُد زیر را در نظر بگیرین :
int intNumber = 12;
intNumber /= 7;
در این کُد مِقدار متغیّر intNumber را (12) کِه یک عدد صحیح می باشد بر 7 کِه اون نیز یک عدد صحیح می باشد تقسیم کرده ایم و جواب مساوی 1,71است. در این مواقع compiler (کامپایلر) خطایی تولید نمیکنه،اما مِقدار کِه در متغیّر intNumber ذخیره میشه با جوابی کِه شُما انتظار دارین فرق داره . به عِبارت دیگر،بعد از اجرای کُد بالا،جواب 1,71 در intNumber نخواهد بود،بلکه بخش اعشار این عدد حذف میشه و مِقدار 1 در متغیّر intNumber قرار میگیرد . همون طور کِه ممکنه تصور کنین،اگر بَرنامه ای بنویسین کِه بخواهد با انواع مختلف داده ها کار کند و از عددهای صحیح استِفاده کنین با مشکل مواجه خواهید شد . در بخش بعدی خواهید دید کِه چگونه میتونین با استِفاده از عددهای اعشاری،از بروز مشکلاتی مثل پیش جلوگیری کنین .
عددهای اعشاری :
عددهای صحیح بَرای انجام محاسبات ریاضی که خیلی دقیق و با اعشار هستند ، مناسب نمی باشَند . به دلیل اینکه نتیجه بیش تر این محاسبات دارای بخش اعشاری می باشد و عددهای صحیح هم نمیتونن بخش اعشاری را در خود نگه داری کنند . در این قِسمت ، نحوه انجام محاسبات ریاضی با عددهای اعشاری را در بَرنامه های مختلف مثل محاسبه مساحت و محیط دایره را میتونین تمرین کنید.
امتحان کنین: عددهای اعشاری
1) یک پروژه جدید در visual studio به نام Math Pt-Floating ایجاد کنین. پیش از هر چیز،یک دکمه روی form قرار بدین و ویژگی Name اون را مساوی btnFloatMath و ویژگی Text اون را مساوی Test Double قرار بدین .
2) روی Button btnFloatMath دو بار کلیک نمایید و در متود مربوط به event (رویداد) کلیک اون کدی را کِه در زیر مشخص شده می باشد وارد کنین:
3) بَرنامه را اجرا نمایید و روی کلید Test Double کلیک نمایید. نتیجه ای شبیه شکل 3-5 را باید مشاهده کنین.
چگونه کار میکنه ؟
مهم ترین تغییر در بَرنامه بالا،تغییر نوع تَعریف متغیّر می باشد :
double dblNumber;
به جای اینکه بَرای تَعریف متغیّر از کلمه کلیدی int استِفاده کنیم،از کلمه double استِفاده کرده ایم. این کلمه به سی شارپ میگوید کِه شُما میخواهید در این متغیّر به جای عددهای صحیح،اعداد با بخش اعشار قرار بدین . در نتیجه،هر عملیاتی کِه بر روی متغیّر dblNumber انجام بدین از نوع اعشاری خواهد بود و میتونه بخش اعشاری را نیز نگه داری کند . نکته مهم دیگه در کُد بالا این می باشد کِه به جای استِفاده از پیشوند int از پیشوند dbl استِفاده کرده ایم تا مشخص باشه کِه متغیّر بالا عددهای اعشاری از نوع Double را در خود نگه داری میکنَند .
البته با این کِه عملیات روی متغیّر dblNumber بخش اعشاری را نیز نگهداری میکنَند ولی شیوه انجام عملیات،همون طور کِه در کُد زیر مشاهده میکنین،با عملیات روی عددهای صحیح تفاوتی نداره .
dblNumber = 45.34;
dblNumber *= 4.333;
MessageBox.Show("Multiplication test... " + dblNumber,
"Floating Points");
اگر کُد بالا را اجرا نمایید،نتیجه 196,45822 را مشاهده میکنین کِه مثل دو عددی کِه در هم ضرب شدند دارای بخش اعشاری نیز می باشد. البته عددهایی کِه در این محاسبات به کار میروند حتماً نباید دارای قِسمت صحیح باشند،بلکه مثل بخش تقسیم بَرنامه پیش میتونن از دو عدد صحیح تشکیل شده باشند کِه در صورت نیاز حاصِل عِبارت با بخش اعشاری نشان داده خواهد شد . مثلا به کُد زیر توجه نمایید :
dblNumber = 12;
dblNumber /= 7;
MessageBox.Show("Division test... " + dblNumber,"Floating Points");
نتیجه این تقسیم دارای بخش اعشاری نیز خواهد بود به دلیل اینکه متغیّر dblNumber به گونه ای تَعریف شده می باشد کِه در صورت نیاز بتونه بخش اعشاری عددها را نیز نگه داری کند. بنابَراین اگه بَرنامه بالا را اجرا نمایید،عدد 1,71428571428571 را به عنوان نتیجه مشاهده خواهید کرد .
حالت های دیگه :
عددهای اعشاری علاوه بر مقادیر عددی ، میتونن حالت های خاص دیگَری را نیز نگه داری کنند. بعضی از این حالات عِبارتند از :
- NaN – کِه به معنی “Not a Number “یا “عدد نمی باشَد” می باشد.
- بی نهایت منفی
- بی نهایت مثبت
که فعلاً خودتون رو درگیر این حالتها نکنین.
عددهای اعشاری با دقّت معمولی :
در بخش قَبلی از عددهای اعشاری با دقّت مضاعف استِفاده کردیم،اما در دات نت شُما بَرای نگه داری عددهای اعشاری خود میتوانید از دو نوع عدد اعشاری استِفاده کنین . در بعضی از مواقع،قِسمت اعشاری یک عدد ممکنه تا بی نهایت ادامه پیدا کند (مثل عدد پی) ولی رایانه بی نهایت فضا بَرای نگه داری این اعداد نداره،بنابراین همیشه برای نگه داری تعداد ارقام اعشاری یک عدد محدودیتهایی هست. این محدودیت به اندازه یا فضایی بستگی داره کِه متغیّر بَرای نگه داری عدد از اون استِفاده میکنه .
توجه داشته باشین: به جز در موردهایی کِه به دقّت بسیار بالایی نیاز دارین،از اعداد با دقّت مضاعف استِفاده نکنین و به جای اون اعداد با دقّت معمولی را به کار ببرید . استِفاده از اعداد با دقّت مضاعف به جای اعداد با دقّت معمولی،مخصوصاً در بَرنامه های بزرگ میتونه در سرعَت بَرنامه شُما به شدت تاثیرگذار باشه .
برای انتخاب اینکه از چه نوع عددی استِفاده کنین،باید به محاسباتی کِه میخواهید انجام بدین توجه نمایید . بَرای تَعریف متغیّر های عددی با دقّت مضاعف از کلمه کلیدی double و بَرای تَعریف متغیّر های عددی با دقّت معمولی از کلمه کلیدی float استِفاده کنین.
پیشنهاد میکنم جدول زیر را که مربوط به محدوده ی انواع داده مانند float و double و int هست را حتماً مشاهده کنین: