مشکل به خاطر اینه که متغیر هایی مثل Double از نوع Binary Floating Point هستن و در نمایش اعشاری ده دهی مشکل دارن. به عبارتی نمی تونن تمام اعداد رو به دلیل محدودیت در ظرفیت حافظه پوشش بدن در نتیجه اعدادی که در دامنه ی تعریفشون نباشه رو به نزدیک ترین عدد تعریف شده در اون فضا گرد می کنن. در حالی که اگر مقدار صحیح عدد بزرگ نباشه، متغیر Decimal به خوبی این اعداد اعشاری رو تا ارقام معین پوشش میده.
برای اطلاعات بیش تر:
c# - Problems with Math.Truncate(num) - Stack Overflow
Binary floating point and .NET
A Tutorial on Data Representation - Integers, Floating-point numbers, and characters
IBM Compilers






پاسخ با نقل قول
Bookmarks