TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 548 subscribers
Post #32 83
🎲 قوانین بازی با اعداد در #C :
همه چیز درباره تبدیل‌های عددی (Casting)

تا حالا فکر کردید وقتی یه int رو توی یه long می‌ریزید، یا یه double رو به زور تو یه int جا می‌دید، پشت صحنه چه اتفاقی میفته؟

این تبدیل‌ها (Conversions) قوانین خودشون رو دارن و ندونستن این قوانین، می‌تونه به از دست رفتن داده و باگ‌های وحشتناک ختم بشه. بزن بریم این قوانین رو یک بار برای همیشه یاد بگیریم.

✅ نوع اول: تبدیل‌های امن و ضمنی (Implicit)

این تبدیل‌ها مثل ریختن آب از یه لیوان کوچیک تو یه سطل بزرگه؛ کاملاً امن، بدون دردسر و بدون از دست رفتن حتی یک قطره آب!

وقتی نوع داده مقصد، گنجایش تمام مقادیر ممکن در نوع داده مبدأ رو داشته باشه، #C خودش هوشمندانه و به صورت خودکار این تبدیل رو انجام میده.

int myInt = 12345;

// int (32-bit) به راحتی در long (64-bit) جا میشه
long myLong = myInt;

// int (عدد صحیح) به راحتی به double (عدد اعشاری) تبدیل میشه
double myDouble = myInt;

float myFloat = 123.45F;

// float (32-bit) به راحتی در double (64-bit) جا میشه
double anotherDouble = myFloat;


⚠️ نوع دوم: تبدیل‌های خطرناک و صریح (Explicit Casting)
حالا برعکسش رو تصور کنید: می‌خواید آب یه سطل بزرگ رو تو یه لیوان کوچیک جا بدید. احتمال اینکه آب سرریز بشه و بخشی ازش از دست بره، خیلی زیاده!

اینجا دیگه سی‌شارپ به شما اجازه نمیده این کار رو خودکار انجام بدید. شما باید با مسئولیت خودتون و با استفاده از Casting (قرار دادن نوع مقصد داخل پرانتز)، به کامپایلر بگید: "می‌دونم دارم چیکار می‌کنم و ریسکش رو می‌پذیرم!"

long bigNum = 3_000_000_000L;
double myDouble = 12345.6789;

// برای جا دادن long در int، باید کست کنیم
// اگه عدد بزرگ باشه، داده از دست میره!
int myInt = (int)bigNum;

// برای جا دادن double در int، باید کست کنیم
int anotherInt = (int)myDouble; // مقدارش میشه 12345


💣 دو تله مرگبار در تبدیل‌های صریح
وقتی کست می‌کنید، حواستون به این دوتا تله باشه:

بریده شدن اعشار (Truncation):
وقتی یه عدد اعشاری (double یا float) رو به یه عدد صحیح (int) کست می‌کنید، بخش اعشاری عدد گرد نمیشه، بلکه وحشیانه بریده و حذف میشه!
double price = 99.99;
int priceAsInt = (int)price; // مقدارش میشه 99، نه 100!


از دست رفتن دقت (Precision Loss):
گاهی اوقات، حتی در تبدیل‌های امن (مثل int به float)، ممکنه دقت رو از دست بدید. float می‌تونه اعداد خیلی بزرگتری رو نشون بده، ولی دقتش در جزئیات کمتر از int هست.

int bigInt = 100_000_001;

// اینجا مقدار حفظ میشه، ولی دقت از بین میره
float myFloat = bigInt;

// وقتی برمی‌گردونیم، می‌بینیم که عدد تغییر کرده!
int convertedInt = (int)myFloat; // مقدارش میشه 100_000_000


🔖 هشتگ‌ها :
#CSharp
#CodingTips
#Casting
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →