مشکل در اعداد Float و Double
سلام
عدد 123.320140 را داریم از نوع دابل.
حال قسمت اعشاری را به هر روشی که دوست داریم. می کشیم بیرون. اما عدد آن چیزی نیست که ما انتظار داریم
البته در Console.Write بله. اما هنگام تریس کردن و یافتن دقیق کد مشکل و خطا داریم.
کسی می دونه چرا؟ چرا این خطا در دابل و فلوت وجود داره؟ بیشتر دوست دارم بدانم چطور محاسبه میشود که این خطا وجود دارد و در نوع داده دسیمال این مشکل نیست.
:give_rose:
پاسخ: مشکل در اعداد Float و Double
سلام!
شما به چه روشی قسمت اعشاری رو استخراج می کنید؟ مسلما روش اجرای این کار مهمه.
بعد خطایی که شما بهش اشاره دارید یک خطای محاسباتی هستش و یا یک خطای منطقی در خطوط برنامه به هنگام کامپایل یا اجرا؟
دو خط آخر سوالتون رو هم اصلا" متوجه نشدم.
:give_rose:
پاسخ: مشکل در اعداد Float و Double
نقل قول:
سلام!
شما به چه روشی قسمت اعشاری رو استخراج می کنید؟ مسلما روش اجرای این کار مهمه.
بعد خطایی که شما بهش اشاره دارید یک خطای محاسباتی هستش و یا یک خطای منطقی در خطوط برنامه به هنگام کامپایل یا اجرا؟
دو خط آخر سوالتون رو هم اصلا" متوجه نشدم.
:give_rose:
سلام
با توابع آماده سی شارپ .مثل Truncate قسمت صحیح برمیدرایم و از کل عدد کم میکنیم.
کد:
double i = 12.30214;
double a = i - Math.Truncate(i);
حال a برابر است با 0.30213999999999963
پاسخ: مشکل در اعداد Float و Double
مشکل به خاطر اینه که متغیر هایی مثل Double از نوع Binary Floating Point هستن و در نمایش اعشاری ده دهی مشکل دارن. به عبارتی نمی تونن تمام اعداد رو به دلیل محدودیت در ظرفیت حافظه پوشش بدن در نتیجه اعدادی که در دامنه ی تعریفشون نباشه رو به نزدیک ترین عدد تعریف شده در اون فضا گرد می کنن. در حالی که اگر مقدار صحیح عدد بزرگ نباشه، متغیر Decimal به خوبی این اعداد اعشاری رو تا ارقام معین پوشش میده.
برای اطلاعات بیش تر:
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]
برای مشاهده این لینک/عکس می بایست عضو شوید !برای عضویت اینجا کلیک کنید ]