السلام عليكم ورحمة الله وبركاته
صادفت اليوم خطأ منطقي شل حركة النظام وهو كالتالي:
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
لم أجرب إصدارات أخرى من اللغة لأن النظام يعتمد على بعض الدوال المحذوفة والترقية ستؤدي إلى توقف عمل النظام.
- طرحت المُشكلة على stackoverflow وتم تحويلي للرابط رقم [1]، فمعاملات المقارنة العادية لا تصلح لمقارنة الأعداد ذات الفاصلة العائمة Float راجع الرابط رقم 2، فعليك إما تقريب القيمة عبر round رابط [3] قبل عملية المساواه أو استخدام أحد الدوال المخصصة لهذا الغرض مثل bccomp رابط [4]
[1]
[2]
[3]
[4]
التعليقات