PDA

View Full Version : نتیجه عجیب ضرب متغیرهای float و double



resident
جمعه 05 دی 1399, 19:02 عصر
سلام. من در C# دو متغیر تعریف کردم:


double dbl=100,000,000;
float count=2.2;

وقتی این دو متغیر رو در هم ضرب می کنم عدد زیر رو بهم میده:


dbl*count= 220,000,005

چرا نتیجه 220,000,000 نیست؟ راه حلش چیه؟

the king
جمعه 05 دی 1399, 19:36 عصر
سلام. من در C#‎ دو متغیر تعریف کردم:


double dbl=100,000,000;
float count=2.2;

وقتی این دو متغیر رو در هم ضرب می کنم عدد زیر رو بهم میده:


dbl*count= 220,000,005

چرا نتیجه 220,000,000 نیست؟ راه حلش چیه؟
double و float با سیستم ممیز شناور محاسبه انجام می دهند، مزیت ممیز شناور در اینه که بازه عددی بزرگی ایجاد می کنه ولی در عوض تعداد رقم های با ارزش کمتری رو با دقت ذخیره می کنه، یعنی الزاما نتیجه دقیق نیست. در نتیجه محاسبات ممیز شناور تخمینی است و برایش کمی اینور و اونور عادی ئه.
برای همینه که فرضا برای محاسبات مالی از float و double استفاده نمی کنند. در اینجور موارد بجای float و double از decimal استفاده کنید که رقم ها رو با دقت بیشتری ذخیره می کنه.

رجوع شود به :
مشکل در استفاده از FLOAT
(https://barnamenevis.org/showthread.php?53317-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-FLOAT)سوال: مقادیر اعشاری (https://barnamenevis.org/showthread.php?235895-%D9%85%D9%82%D8%A7%D8%AF%DB%8C%D8%B1-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1%DB%8C)
سوال: بهترین نوع داده برای مبلغ در C#‎ (https://barnamenevis.org/showthread.php?380241-%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%A8%D9%84%D8%BA-%D8%AF%D8%B1-c)

resident
جمعه 05 دی 1399, 22:49 عصر
double و float با سیستم ممیز شناور محاسبه انجام می دهند، مزیت ممیز شناور در اینه که بازه عددی بزرگی ایجاد می کنه ولی در عوض تعداد رقم های با ارزش کمتری رو با دقت ذخیره می کنه، یعنی الزاما نتیجه دقیق نیست. در نتیجه محاسبات ممیز شناور تخمینی است و برایش کمی اینور و اونور عادی ئه.
برای همینه که فرضا برای محاسبات مالی از float و double استفاده نمی کنند. در اینجور موارد بجای float و double از decimal استفاده کنید که رقم ها رو با دقت بیشتری ذخیره می کنه.

رجوع شود به :
مشکل در استفاده از FLOAT
(https://barnamenevis.org/showthread.php?53317-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-FLOAT)سوال: مقادیر اعشاری (https://barnamenevis.org/showthread.php?235895-%D9%85%D9%82%D8%A7%D8%AF%DB%8C%D8%B1-%D8%A7%D8%B9%D8%B4%D8%A7%D8%B1%DB%8C)
سوال: بهترین نوع داده برای مبلغ در C#‎‎ (https://barnamenevis.org/showthread.php?380241-%D8%A8%D9%87%D8%AA%D8%B1%DB%8C%D9%86-%D9%86%D9%88%D8%B9-%D8%AF%D8%A7%D8%AF%D9%87-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%85%D8%A8%D9%84%D8%BA-%D8%AF%D8%B1-c)

متشکرم بابت پاسخگویی تون...