خطأ منطقي - الإصدار 5.6.30 من لغة PHP لم أجد له حل

السلام عليكم ورحمة الله وبركاته

صادفت اليوم خطأ منطقي شل حركة النظام وهو كالتالي:

var_dump($total_amount);
var_dump($this->TOTAL_AMOUNT);
if( $total_amount != $this->TOTAL_AMOUNT){
    echo  "System price error {$total_amount} != {$this->TOTAL_AMOUNT}";
}
exit();

مخرجات الكود السابق كالتالي وهو ناتج غير منطقي:

float(344586.57) float(344586.57) 
System price error 344586.57 != 344586.57

الناتج يعني أن الشرط محقق مع أن الرقمين متساويين حاولت استخدام معاملات المساواه من نفس النوع !== مع أن القيم في الأساس من نفس النوع وهو float ولكن دون جدوى

  • لم استطع تحديد سبب المُشكلة بعد لأجد لها حل o_O

  • لم أجرب إصدارات أخرى من اللغة لأن النظام يعتمد على بعض الدوال المحذوفة والترقية ستؤدي إلى توقف عمل النظام.


لا أرى أنه خطأ منطقي وهذا ليس خاصاً بلغة php فقط بل يشمل جميع اللغات (في اعتقادي) لأن المشكلة أكثر تعقيداُ ومتعلقة بالبنية الاساسية التي يقوم عليها عمل أجهزة الحاسب (الأخطاء الشائعة للفاصلة العائمة).

مثال: 1 قسمة ثلاثة، هل تساوي

0.3

أم:

0.33

أم:

0.33333333

في منطق الحاسب الآلي، فإن الأرقام المذكورة أعلاه مختلفة في قيمتها عن بعضها البعض!

لتجاوز هذه المعضلة، يجب دائماً تدوير (تقريب) النواتج إلى عدد محدد من الخانات بعد الفاصلة.

هذا مستند من ميكروسوفت يوضع تفاصيل أكثر مدعومة بأمثلة:

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

  • شكراً لك على تزويدنا بهذا الرابط.