PDA

View Full Version : سوال: چرا موقع محاسبه رقمهای بالا 10 رقم، اعداد روی 2147483647 قفل می کنن؟



idocsidocs
شنبه 09 اردیبهشت 1391, 22:30 عصر
من یه فروشگاه ساز طراحی کردم و هر وقت رقمهای در حد 250 میلیون تومن به بالا رو وارد می کنم، عدد نهایی روی 2147483647 ثابت می مونه.

مشکل چیه و چطور می تونم این مسئله بر طرف کنم؟

MMSHFE
یک شنبه 10 اردیبهشت 1391, 00:50 صبح
چون براي نگهداري اعداد صحيح در PHP از 4 بايت يا 32 بيت استفاده ميشه كه درنتيجه 2 به توان 32 عدد رو ميشه نشون داد كه كلاً ميشه 4,294,967,296 عدد كه نصفش اعداد منفي هست و درنتيجه ميتونيد اعداد از 2,147,483,648- تا 2,147,483,647 (چون صفر هم جزء مثبتها محسوب ميشه) رو نگهداري كنيد. درضمن اگه از settype استفاده كنيد و نوعش رو float بگذارين، اعداد بيشتري رو ميشه نگهداري كرد. البته من الآن تست كردن تا ارقام خيلي بيشتري رو پشتيباني ميكرد. نسخه PHP شما چنده؟ موفق باشيد.

idocsidocs
یک شنبه 10 اردیبهشت 1391, 02:42 صبح
نسخه 5 استفاده می کنم.

لطفا با مسال و کد توضیح بدید.

behruz999
یک شنبه 10 اردیبهشت 1391, 10:58 صبح
سلام
دوست گرامي فكر كنم آقاي شهركي لپ مطلب رو گفت
به هر حال براي رفع مشكلتون بهتره كه type متغير تون رو از int به long int يا float تغيير بدي اينجوري مشكلت حل ميشه
موفق باشي

idocsidocs
یک شنبه 10 اردیبهشت 1391, 12:59 عصر
چطور باید نوع متغیر رو تعیین کنم؟

MostafaEs3
یک شنبه 10 اردیبهشت 1391, 14:01 عصر
با settype میشه نوع رو تعیین کرد :لبخندساده:

MMSHFE
یک شنبه 10 اردیبهشت 1391, 14:19 عصر
$x = 250000000;
settype($x, 'float');
// or
$x = (float) 250000000;

idocsidocs
یک شنبه 10 اردیبهشت 1391, 16:26 عصر
با settype میشه نوع رو تعیین کرد :لبخندساده:


شما تویی فروشگاه که ساختید، متغیرهای عددی رو به همین صورت تعریف کردید؟

رضا قربانی
یک شنبه 10 اردیبهشت 1391, 23:27 عصر
من یه فروشگاه ساز طراحی کردم و هر وقت رقمهای در حد 250 میلیون تومن به بالا رو وارد می کنم، عدد نهایی روی 2147483647 ثابت می مونه.

مشکل چیه و چطور می تونم این مسئله بر طرف کنم؟

احتمالا با بانک در ارتباطی . فیلد مورد نظر بانک شما int هست . اون رو به BigInt تغیر بده مشکلت حل میشه.

idocsidocs
یک شنبه 10 اردیبهشت 1391, 23:50 عصر
احتمالا با بانک در ارتباطی . فیلد مورد نظر بانک شما int هست . اون رو به BigInt تغیر بده مشکلت حل میشه.
بله من این اطلاعات رو توی دیتابیس ذخیره می کنم.
یعنی مشکل از پی اچ پی نیست؟

MostafaEs3
یک شنبه 10 اردیبهشت 1391, 23:54 عصر
:متفکر: ببین میتونه از دیتابیس باشه ... الان مثلا من تست کردم مشکلی نبود .. حتی با number_format هم میشه اعداد رو به صورت های خاص جدا کرد

رضا قربانی
یک شنبه 10 اردیبهشت 1391, 23:59 عصر
بله من این اطلاعات رو توی دیتابیس ذخیره می کنم.
یعنی مشکل از پی اچ پی نیست؟
اول تست بعد سوال . تعداد پست زدن و تاپیک ها هم کمتر می شه .

حالا یا جواب می ده یا نمی ده.

idocsidocs
دوشنبه 11 اردیبهشت 1391, 12:25 عصر
:متفکر: ببین میتونه از دیتابیس باشه ... الان مثلا من تست کردم مشکلی نبود .. حتی با number_format هم میشه اعداد رو به صورت های خاص جدا کرد


شما وقتی از فروتل استفاده می کنید و می خواید اعداد رو روند کنید از چه تابعی برای روند کردن عددها استفاده می کنید؟
نوع عددها توی پی اچ پی و دیتابیس چی هستن؟
عددهای مربوط به مبلغ کل، مالیات و تخفیف رو چطور بدست می یارید و برای فروتل می فرستید؟

من وقتی مالیات رو روی صفر بذارم همه عددها درست در می یان ولی وقتی پرداخت نقدی باشه چون مالیات صفر نیست، فکر کنم توی محاسبه مالیات اشتباه می کنم و عدد نهایی با تخفیف ایجاد می شه.

MostafaEs3
دوشنبه 11 اردیبهشت 1391, 13:55 عصر
ببین قیمت هر محصول رو جدا باید بزنی .. مثلا من یک foreach گذاشتم (برای گرفتن یک رشته به صورتی که گفته شده بود) بعد یک نقطه قبل از مساوی گذاشتم و همه ی مقادیر رو باهم زدم .. تخفیف هم توی همون رشته باید مشخص بشه . فروتل همه ی کارا رو انجام میده
درضمن برای رند کردن هم میشه از intval استفاده کرد . بیشتر برای وزن بکار میره