خوش اومدید.
توی این ویدیو می‌خوام نشون بدم چطور می‌تونیم برنامه‌مون رو گسترش بدیم
که فقط عدد صحیح جمع نکنه، بلکه اعداد اعشاری رو هم پشتیبانی کنه.
پس اگه بخوایم عددی با ممیز اعشاری داشته باشیم، باید از نوع داده‌ی دیگه‌ای استفاده کنیم.
چون int یا همون integer فقط عددهای صحیح رو نگه می‌دارن.
بیاید ببینیم چطور می‌تونیم برنامه‌مون رو تغییر بدیم.
اینجا myNumber داریم که از نوع int هست.
ولی یک نوع دیگه هم داریم.
پس بیاید امتحان کنیم.
ببینیم ویژوال استودیو چی پیشنهاد میده اگه بخوایم از عدد اعشاری استفاده کنیم.
می‌بینیم که خطا میده.
پس به جای صفر، من 0.0 می‌نویسم که در عمل همونه.
ولی در واقع دقیقاً یکی نیست.
وقتی روش می‌رید، می‌بینید که میگه این یک عدد اعشاری با دقت دوبرابره (double).
int و خطایی که میده اینه: نمی‌تونه نوع double رو به تبدیل کنه، .
تبدیل صریح وجود دارد
cast میگه نکردی؟
یعنی در واقع میشه یک نوع داده رو به نوع دیگه تبدیل کرد.
ولی من نمی‌خوام این کارو انجام بدم.
می‌خوام به جای int، از double استفاده کنم.
پس myNumber رو double تعریف می‌کنم.
و برای عدد دوم هم همین کارو می‌کنم.
یعنی myNumber1 و .
my number2.
هر دوشون double خواهند بود.
می‌بینید که میشه صفر رو بدون ممیز به double داد.
ولی برعکسش ممکن نیست.
یعنی نمی‌تونیم عدد اعشاری رو به int بدیم.
برای double هر دو حالت کار می‌کنه، خودش خودکار تبدیلش می‌کنه به 0.0.
پس نیازی نیست دستی وارد کنیم.
ولی اگه بنویسیم مرتب‌تره.
حالا به جای اینکه بگیم "یک عدد صحیح وارد کنید"، می‌گیم "یک عدد وارد کنید"،
چون حالا عدد اعشاری هم کار می‌کنه و ورودی کاربر رو می‌گیریم.
این درسته.
اما حالا به جای int.Parse باید از double.Parse استفاده کنیم،
چون double هم متدی به اسم Parse داره که رشته رو به double تبدیل می‌کنه.
حالا باید برای متغیر number1 هم همینو درست کنیم چون اسمش عوض شده.
و همین تغییر رو برای sum هم اعمال کنیم.
بریم سراغ سؤال دوم.
اینجا دوباره از کاربر عدد می‌پرسیم.
می‌گیم "یک عدد وارد کنید" نه "یک عدد صحیح".
ورودی رو دوباره می‌گیریم.
و اینجا هم باید همون تغییر رو اعمال کنیم.
یعنی بنویسیم double.Parse.
می‌بینید خطا نمی‌ده.
این درست بود.
ولی مشکل اینجاست که با double درست کار نمی‌کرد.
چون میشه int رو توی double ذخیره کرد، اما double رو توی int نه.
مثلاً عدد 5 داخل double میشه 5.0 و اینطوری ذخیره میشه.
ولی برعکسش کار نمی‌کنه.
پس باید اینو در نظر گرفت.
پس اینجا هم double.Parse استفاده می‌کنم.
و دوباره ورودی کاربر رو به double تبدیل می‌کنم.
بعد number1 و number2 رو با هم جمع می‌کنم و توی sum ذخیره می‌کنم.
ولی خطا می‌ده.
میگه double number1 رو نمی‌تونه به int تبدیل کنه.
یعنی تبدیل ضمنی به طور خودکار از int به double ممکنه،
ولی از double به int نه.
بذارید سریع نشون بدم.
اگه double sum داشته باشم و int myInt1 = 1 و int myInt2 = 2،
می‌تونم myInt1 + myInt2 رو جمع کنم و توی double بذارم.
چون int به double خودکار تبدیل میشه.
int ولی خودکار تبدیل نمیشه. double به
پس چطوری حلش کنیم؟
چطوری این مشکل رو حل کنیم؟
double ما این روحل می کنیم با تبدیل ان به
یعنی بگیم double sum = number1 + number2، همون myNumber1
+ myNumber2.
حالا توی خروجی پایین باید از myNumber1 استفاده کنیم چون myNumber
دیگه وجود نداره.
اسم متغیرها رو کمی تغییر دادم.
خب اجرا کنیم.
مثلاً می‌زنم 15.3 و 13.9.
می‌بینید که نتیجه رو 153 و 139 نشون میده، .
یعنی 292
این درست نیست.
درسته
باید ممیز اعشاری داشته باشیم.
بذارید نشون بدم چرا این اتفاق افتاده.
به خاطر اینه که تنظیمات ویندوز من آلمانیه.
ویندوز من مطمئنم که المانیه
توی آلمان ممیز اعشاری به جای نقطه، ویرگوله.
یعنی ما از نقطه به عنوان ممیز استفاده نمی‌کنیم.
به جاش ویرگول می‌ذاریم.
پس به جای 15.3 باید بگیم 15,3.
بذارید نشونتون بدم منظورم چیه.
دوباره همون رو می‌زنم: 15,3 و 13,9999.
و این نتیجه رو می‌گیریم.
می‌بینید که حاصل 15,3 و 13,9 میشه 29.2 با کلی صفر و یه.
سه آخرش
حالا چرا اینطوری شده رو بعداً نگاه می‌کنیم.
اما اینکه چطور مشکل نقطه و ویرگول رو درست کنیم،
این چیزی هست که توی ویدیوی بعدی حلش می‌کنیم.
پس اونجا می‌بینمتون.