تبدیل نوع داده در زبان C
گاهی اوقات نیاز داریم تا نوع داده های خود را به نوعی دیگر تبدیل کنیم، به این کار تبدیل نوع داده می گویند.
برای مثال دو داده از نوع int داریم (5 و 2) و می خواهیم آن ها را در هم تقسیم کنیم، ما می دانیم که تقسیم عدد 5 بر 2 مساوی با عدد 2.5 که از نوع float است خواهد بود.
اما خروجی تقسیم بالا عدد 2 را نمایش خواهد داد.
به مثال زیر توجه کنید.
int x = 5;
int y = 2;
int sum = 5 / 2;
printf("%d", sum); // مقدار 2 را نمایش خواهد داد
در زبان C دو نوع تبدیل داده وجود دارد.
- تبدیل ضمنی (خودکار)
- تبدیل صریح (دستی)
تبدیل نوع داده ضمنی (خودکار):
این نوع تبدیل نوع داده بصورت خودکار توسط کامپایلر C انجام می شود.
// بصورت خودکار نوع int را به float تبدیل می کند
float myFloat = 9;
printf("%f", myFloat); // 9.000000
در مثال بالا دیدیم که مقدار عددی از نوع float بصورت 9.000000 نمایش داده شد که می تواند یک موضوع چالش برانگیزی را در خصوص کنترل مقادیر عددی برای شما ایجاد کند.
البته که بصورت برعکس کامپایلر مقدار عددی 9.99 از نوع float را به مقدار 9 و از نوع int تبدیل می کند.
به مثال زیر توجه کنید.
// بصورت خودکار نوع float را به int تبدیل می کند
int myInt = 9.99;
printf("%d", myInt); // 9
در مثال های بالا بصورت کامل با تبدیل نوع داده خودکار و مشکلات غیر منتظره آن آشنا شدیم.
تبدیل نوع داده صریح (دستی):
این نوع تبدیل نوع داده بصورت دستی بوده و کافیست مقدار نوع داده را داخل پرانتز ( ) قرار دهیم.
برای درک بهتر به مثال زیر توجه کنید.
// تبدیل int به float بصورت دستی
float sum = (float) 5 / 2;
printf("%f", sum); // 2.500000
البته می توانید نوع داده را در مقابل متغیر آنها هم بنویسید.
در جلسات قبلی روش تعیین تعداد اعداد اعشاری بعد از ممیز (دقت اعشاری) را آموختیم که می توانیم از آن استفاده کنیم.
به مثال زیر توجه کنید.
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%.1f", sum); // 2.5
مثال عملی
در مثال زیر درصد امتیاز کاربر در رابطه با حداکثر امتیاز در یک بازی، آورده شده است.
// حداکثر امتیاز بازی را 500 در نظر گرفتیم
int maxScore = 500;
// امتیاز واقعی کاربر
int userScore = 420;
/* محاسبه امتیاز کاربر نسبت به کل امتیاز بازی
مقدار userScore را به عدد اعشاری تغییر دادیم تا دقت امتیاز را افزایش دهیم*/
float percentage = (float) userScore / maxScore * 100.0;
// نمایش درصد
printf("User's percentage is %.2f", percentage);
تمرین
جای خالی را طوری با دستور کد صحیح کامل کنید تا پاسخ عدد 2.5 شود.
printf("%.1f", sum);