رضا
10 ماه پیش توسط رضا مطرح شد
2 پاسخ

نمایش اعداد اعشاری بزرگ با PHP

برای مثال عدد اعشاری : 0.000000000008701
در زبان PHP چنین اعدادی رو به صورت فرمول ریاضی مینویسه و برای نمایش دادن همچین اعداد اعشار زیاد باید تبدیل به رشته کنیم تا درست نمایش بده ولی متاسفانه توابع پیش فرض PHP همچین اعدادی رو نمیتونن به رشته تبدیل کنن و رقم اعشاری درستی رو نشون نمیدن چون اعشارش زیاده.
فقط برای نمایش رشته ای از تابع number_format میشه استفاده کرد ولی متاسفانه چون تعداد رقم اعشار عدد هامون ممکنه متغیر باشه بنابراین باید تعداد رقتم اعشار رو بهدست بیاریم بعد از این تابع برای نمایش استفاده کنیم

function int_number($str) {
    $last_int = 0;
    for ($a = 0; $a < 50; $a++) {
        if ($str[$a] > 0) {
            $last_int = $a;
        }
    }
    return $last_int;
}
$number= 0.000000000008701; // strlen:17
$str_num = number_format($number,20, '.', '');
$decimal = int_number($number);
$number= number_format($number, $decimal-1, '.', '');

1- ابتدا عددی که داریم رو بدون در نظر گرفتن تعداد اعشار تبدیل به رشته میکنیم (با یه عدد اعشار زیاد اینجا مثلا 20 زدم)
2- سپس داخل این رشته که به صورت "0.00000000000870100000" خواهدبود (5 تا صفر آخرش اضافه شده در مرحله قبل)
3- با استفاده از تابع int_number خودمون میایم و آخرین عدد بزرگتر از صفر رشته بالا جایگاهش رو درمیاریم (حلقه بررسی تا 50 حرف رو بررسی میکنه که کافیه)
4- و درنهایت چون تعداد اعشار مورد نیازمون رو الان داریم میتونیم عدد اصلی رو به رشته تبدیل و نمایش دهیم.

این موضوع رو مطرح کردم چون توی نت نبود گفتم شاید به درد یکی بخوره و همچنین اگر پیشنهاد دیگه ای یا روش بهتری بود بگید
یه مورد جالب هم بود که وقتی در تابع number_format تعداد اعشار رو زیاد میزدم مثلا 30 تا به جای صفر اعداد اضافه می کرد که احتمالا مربوط به ریاضیات باشه که اطلاعات ندارم راجبش ممنون میشم اگه کسی میدونه بگه یادبگیریم.


ثبت پرسش جدید
یاسین یاسمی
تخصص : برنامه نویس بک اند
@rapcher 10 ماه پیش مطرح شد
0

سلام.

$number = 0.000000000008701;
$str_num = number_format($number, 20, '.', ''); // تبدیل عدد به رشته با 20 رقم اعشار
$decimal = strlen($str_num) - 2; // تعداد رقم اعشار (بدون در نظر گرفتن نقطه اعشاری)
$number = number_format($number, $decimal, '.', ''); // تبدیل عدد به رشته با تعداد اعشار مورد نظر

م.ج
تخصص : برنامه نویس
@mjavadhpour 9 ماه پیش آپدیت شد
0

سلام

خوبه ولی برای کار کردن با اعداد بزرگ معمولا یک سری الگوریتم وجود داره که توی استاندارد لایبراری های زبونا پیاده سازی شده. مثلا توی پی اچ پی یک سری اکستنشن هستن که اینو هندل میکنن.

https://www.php.net/manual/en/book.bc.php
https://php-decimal.io/#installation


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام