سلام،
تو سی شارپ تایپ double مطابق استاندارد IEEE-754 پیاده سازی شده، پس فقط ۱۵ رقم اعشار دقت داره، به همین دلیل اگه عددی اعشاری با تایپ double بخواد ذخیره بشه به نوعی گردسازی انجام میشه.
حالا سوال من اینه: اگه تا ۱۵ رقم اعشار دقت داره پس چرا عدد یک صدم دقیق ذخیره نمیشه؟! برای مثال اگه حاصل ۴۵.۱۸ منهای ۴۵.۱۷ رو تو یه متغیر double ذخیره کنیم و تو پنجره local ویژوال استودیو مقادیر رو ببینیم این مقدار رو بجای یک صدم، ۰.۰۰۹۹۹۹۹۹۹۹۹۹۹۹۹۷۸۶۸ نشون میده؟!
چرا یک صدم داخل متغیر double نمیونه دقیق جا بگیره؟ مگه دقت این تایپ ۱۵ رقم اعشار نیست؟!
اگه تایپ رو به decimal تبدیل کنیم این مشکل حل میشه! البته باید جلوی اعداد M بزاریم تا کامپایلر خطا نگیره و ۴۵.۱۸ و ۴۵.۱۷ رو double در نظر نگیره.
اگه اشتباه نکنم دقت اعشار decimal برابر ۲۸ رقمه. خوب double هم ۱۵ رقمه و ۰.۰۱ رو باید بتونه دقیق ذخیره کنه!