دسته بندی ها
23:19 1403/10/12

دلیل خطای محاسبه در نوع داده ای double در سی شارپ

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : سی شارپ

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 480
پاسخ دهنده : saedbfd 00:02 1403/10/13

تفاوت double و float با decimal در اعداد اعشاری

انواع داده ای double و float و decimal برای کار با اعداد اعشاری در سی شارپ استفاده می شوند. اما در نگهداری اطلاعات به صورت باینری تفاوت هایی میان این Data Type ها وجود دارد.

 

مقایسه float و decimal و double

 

double و float برای نگهداری چه اطلاعاتی مناسب است ؟

به طور خلاصه از این نوع DataType ها برای مقادیر قابل اندازه گیری استفاده کنید. یعنی برای مقادیری که دقت 99.99 درصدی نیاز دارند. به عنوان مثال فرض کنید می خواهید طول 2 سیم را با هم جمع کنید. یکی 21.36 سانتیمتر است و دیگری 65.21 سانتیمتر. در حالت عادی جمع این دو می شود 86.57. 

در double و float دقت اعشار حفظ نمی شود. مثلا ممکن است در جمع بالا عدد 86.5699999 در حافظه ذخیره شود که دقیقا 86.57 نیست ولی خیلی خیلی نزدیک است. البته در نمایش شاید همان 86.57 نمایش داده شود اما در مقایسه 86.56999999 لحاظ می شود.

بنابراین اگر مقادیری دارید که حفظ اعداد اعشار خیلی ریز اهمیت ندارد از این نوع استفاده کنید.

نکته : دقت کنید که double و float دیتاتایپ های سریع تر و سبک تری هستند و نرم افزار شما بهینه تر خواهد بود.

 

decimal برای نگهداری چه اطلاعاتی مناسب است ؟

اگر اطلاعاتی دارید که بسیار بسیار دقیق می باشند و حتی کوچکترین مقادیر اعشاری هم مهم می باشد بهتر است از نوع Decimal استفاده کنید. مثلا در محاسبات مالی و بانک ها بهتر است از این نوع دیتاتایپ استفاده شود تا کوچکترین اختلاف حساب ها و ... نیز لحاظ شود.

 

در مورد سوال شما هم تقریبا واضح هست. احتمالا جمع دو متغیر x و y عددی نزدیک به 0.29999999999 خواهد بود که بسیار بسیار به 0.3 نزدیک است ولی دقیق 0.3 نیست. بنابراین در نمایش همان 0.3 نمایش داده می شود ولی در هنگام مقایسه دچار خطا خواهید شد.

ویرایش شده در پنج شنبه 13 دی 1403 ساعت 01:46:43
به این پاسخ امتیاز بدهید    1
امتیاز: 1654 رتبه: 1
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود