• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در نمایش عددهای بزرگ
#1
با سلام
دوستان من به یه مشکلی برخورد کردم که به نتیجه ای نرسیدم

من یک فایل خیلی ساده Php می سازم با کد


کد پی‌اچ‌پی:
echo 'number_format(92,233,720,368,547,900,000,000)='.number_format(floatval('92233720368547900000000'), 0""""). '<br>';
echo 
'printf(92,233,720,368,547,900,000,000)='.sprintf('%.0f','92233720368547900000000'). '<br>';
echo 
'number_format(9.22337203685479E+22)='.number_format('9.22337203685479E+22'0""""). '<br>';
echo 
'printf(9.22337203685479E+22)='.sprintf('%.0f','9.22337203685479E+22'). '<br>'

حالا به یه نتیجه جالب هنگام اجرای کد می رسم

کد:
number_format(92,233,720,368,547,900,000,000)=92233720368547892297728
printf(92,233,720,368,547,900,000,000)=92233720368547892297728
number_format(9.22337203685479E+22)=92233720368547892297728
printf(9.22337203685479E+22)=92233720368547892297728

اگر دقت کنید انتهای عدد های من در کد php همه اش 0 است ولی وقتی اجرا شد عدد های دیگری شده است
کسی می دونه مشکل از چیه؟
در ضمن نسخه php من 5.2.17
  پاسخ
تشکر شده توسط :
#2
خودم جوابمو پیدا کردم

ولی خیلی مسخره است

https://bugs.php.net/bug.php?id=64038&edit=1
  پاسخ
تشکر شده توسط :
#3
بطور کلی در اکثر زبانهای برنامه نویسی نوع های عددی محدوده های مشخصی از اعداد رو میگیرن، چون فضای حافظه ای که برای هر متغییر عددی اختصاص داده میشه محدوده. اگر شما عددی خارج از محدوده بدید، مثل این اعداد خیلی بزرگ، اونوقت متغییر Overflow میشه و رقمهای اضافی اون که براشون جا نیست حذف میشن.
بنابراین برای هندل کردن اعداد خیلی بزرگ باید از روشهای جایگزین دیگری استفاده کنید. بعضی کتابخانه هایی هم وجود دارن برای همین.

در لینک گزارش باگی هم که گذاشتید در کامنت هاش همین پاسخ رو دادن و در نهایت اون رو یک باگ PHP تشخیص ندادن (باگ خود برنامه نویسه Big Grin).
Status: Not a bug
  پاسخ
تشکر شده توسط :
#4
نسخه php هم آپدیت کن ثواب داره
  پاسخ
تشکر شده توسط : Alaa


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان