تبدیل نوع (Type Conversion)
گاهی باید مقدارِ یک «نوع داده (Data Type)» به نوعی دیگر تبدیل شود. به این کار می گوییم «تبدیل نوع». این تبدیل روی نتیجه محاسبات اثر می گذارد.
تعریف تبدیل نوع
دو مدل داریم: «ضمنی» یعنی خود کامپایلر انجام می دهد. «صریح» یعنی خودمان با پرانتز نوع را مشخص می کنیم.
تقسیم عدد صحیح بدون تبدیل
اینجا هر دو عدد صحیح هستند. بنابراین خروجی اعشاری نمی شود.
int x = 5;
int y = 2;
int sum = 5 / 2;
printf("%d", sum);
تبدیل ضمنی (Implicit Conversion)
گاهی انتساب باعث تبدیل خودکار می شود. کنترل جزئیات سخت تر می شود.
// تبدیل خودکار: int به float
float myFloat = 9;
printf("%f", myFloat);
برعکسش می تواند خطرناک باشد. بخش اعشار قطع می شود.
// تبدیل خودکار: float به int
int myInt = 9.99;
printf("%d", myInt);
در تقسیم صحیح، حتی اگر در float بریزی، باز هم 2 می شود.
float sum = 5 / 2;
printf("%f", sum);
تبدیل صریح (Explicit Conversion)
با نوشتن نوع داخل پرانتز، تبدیل دقیق انجام می دهیم.
// تبدیل دستی: int به float
float sum = (float) 5 / 2;
printf("%f", sum);
می توانیم روی متغیر هم همین کار را انجام دهیم.
int num1 = 5;
int num2 = 2;
float sum2 = (float) num1 / num2;
printf("%f", sum2);
برای نمایش تمیزتر، دقت اعشار را کم می کنیم.
int a = 5;
int b = 2;
float s = (float) a / b;
printf("%.1f", s);
مثالِ واقعی
در بازی، درصد امتیاز کاربر را حساب می کنیم. تبدیل لازم است.
int maxScore = 500;
int userScore = 423;
float percentage = (float) userScore / maxScore * 100.0;
printf("User's percentage is %.2f", percentage);
گام های عملی
- نوع مقادیرت را بررسی کن.
- در تقسیم، یکی را به float تبدیل کن.
- برای خروجی تمیز، از قالب مناسب استفاده کن.
نکته: برای یادگیری دقیق دقت اعشار، صفحه دقت اعشاری را ببین.
بیشتر بخوان: اعداد، تبدیل نوع، و حجم حافظه.
جمع بندی سریع
- ضمنی یعنی خودکار؛ صریح یعنی با پرانتز نوع.
- تقسیمِ صحیح خروجی اعشاری نمی دهد.
- برای اعشار، یکی را به float تبدیل کن.
- با
%.1fخروجی تمیزتر می شود.