النتائج 1 إلى 8 من 8

الموضوع: من غرائب التحويلات الحسابية في PHP

  1. #1

    من غرائب التحويلات الحسابية في PHP



    السلام عليكم.

    إذا كنت تبني تطبيق يتركز بشكل رئيسي على الأرقام والعمليات الحسابية.. ويتطلب دقة متناهية في الحسابات.. فهذا الموضوع راح يفيدك.

    لأني اكتشفت اليوم إن الاعتماد على بنية ال php الأساسية في الحساب قد يؤدي إلى نتائج غير مرضية.

    على سبيل المثال، العملية الحسابية التالية:
    كود:
    (0.1+0.7)*10
    الناتج هو 8.

    باستخدام PHP:
    كود PHP:
    echo (0.1+0.7)*10
    يطبع النتيجة 8 كما هو متوقع.

    الآن لو فرضنا أن نتيجة العملية الحسابية أرقام حقيقية، ونريدها أن تكون صحيحة فإننا سنستخدم (كما في العادة)، إما دالة intval أو النوع (int) للتحويل كما يلي:
    كود PHP:
    echo (int) ((0.1+0.7)*10);
    echo 
    intval ((0.1+0.7) * 10 ); 
    الناتج من كل العمليتين السابقتين = 7، وليس 8 !! وهذا بالتأكيد نتيجة غير متوقعة. وهذا أيضًا يدل على ناتج العملية يتخزن في PHP على هيئة 7.999999 وعندما تستخدم intval فهو راح يلغي ما بعد الفاصلة فقط (Trunc).

    بالتالي الحذر مطلوب دائمًا في التطبيقات التي تحتاج عمليات حسابية دقيقة.

    طبعًا استخدام الدالة round يحل المشكلة تقريبًا،

    ولكن شخصيًا أفضّل استخدام امتداد BCMath http://www.php.net/bc. علمًا بأنها جاهزة للاستخدام من دون إعدادات إضافية على بيئة ويندوز.

    والسلام.





    __________________
    al7amdan AT gmail


  2. #2
    عضو فعال جدا
    تاريخ التسجيل
    Feb 2002
    المشاركات
    2,289


    معلومات جميله جدا


    شكرا لك






  3. #3


    المهمة9
    العفو.
    _______________

    هل فيه أحد آخر لاحظ نفس الملاحظة؟ وإلا بس أنا جهازي مضروب





    __________________
    al7amdan AT gmail

  4. #4
    عضو فعال جدا
    تاريخ التسجيل
    Jun 2003
    المشاركات
    2,123


    مشكور اخوي ملاحظة جيدة وفقكم الله .





    __________________
    htaccess بكل بساطة

    الشفرة الموحدة "يونِكود"

    (إن من مفاسد هذه الحضارة أنها تسمي الاحتيال ذكاءً، والانحلال حرية، و"الرذيلة فناً" والاستغلال معونة) - مصطفى السباعي

  5. #5
    عضو نشيط
    تاريخ التسجيل
    Dec 2001
    المشاركات
    64


    شكرا اخ اللهلوب

    ولكن اذا كانت النتيجة : 52.32654

    واريد ان يقرب الرقم الى : 52.33

    ماهي الدالة لتقريب الرقم






  6. #6
    عضو فعال جدا
    تاريخ التسجيل
    Feb 2002
    المشاركات
    2,289


    اللهلوب اذا انت جهازك مضروب اعتبر اجهزتنا كلها مضروبه كتسجيل موقف مع جهازك الكريم






  7. #7


    عفوا jadweb

    عفوا SQL. أبسط دالة تسوي الشيء هذا هي number_format، وتمرر لها حاجتين الأول اللي هو الرقم، والثاني هو عدد الخانات اللي تبغاها بعد الفاصلة. وفيه باريمترز أخرى تقدر تقراها في المانيول. بالشكل هذا:
    كود PHP:
    $number="52.32654";
    echo 
    number_format($number,2); 
    راح يطبع لك 52.33

    المهمة، مشكور على دفاعك القوي عن جهازي .. يارب يطوّل عمر جهازك، وإذا كان لابتوب يارب ما يخلص شحن البطارية أبد.. والله يبعد عننا شر الفيروسات والهاكرز آمين يا رب العالمين..





    __________________
    al7amdan AT gmail

  8. #8
    عضو نشيط جدا
    تاريخ التسجيل
    Mar 2003
    المشاركات
    309


    عموما المشكلة هذي موجودة في لغة C اتذكر .!

    وصدقني .. اتذكر مشكلتها واقعية .. بسبب حجم int في الميموري .!

    نسيت السبب .. بس اتذكر قريت عنها ..





    __________________
    http://www.taqniah.com





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض