اذهب إلى المحتوى
  • 0

PHP جمع عدة متغيرات عددية وإسناد تنسيق للناتج | مشكلة Notice: A non well formed numeric value encountered

محمد المصري12

السؤال

سلام عليكم

المعادلة دي بتديني الناتج بشكل صحيح عادي لكن رسالة الخطأ دي بتظهر

Notice: A non well formed numeric value encountered 

مش عارف بتظهر ليه رقم ان المعادلة متكررة في اماكن تانية من الصفحة بمتغيرات مختلفة و شغالة زي الفل

        <?php
        $sum_all_rubber = 0;
        foreach ($rubbers AS $rubber){
            $total = (($rubber['countPiece'] * $rubber['colorNumber_input']) * $rubber['price']);
            /** @noinspection PhpWrongStringConcatenationInspection */
            $sum_all_rubber += number_format($total,2);
            ?>

 

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

أعتقد أن المشكلة في السطر 

$sum_all_rubber += number_format($total,2);

حيث أن number_format تعيد سلسلة نصية string وليس رقم، وعندما يصبح المجموع كبير تضيع للسلسة النصية محرف , مثلا

1,999.90

والذي لايجمع مع باقي الأعداد، لذلك حاول تحويل الناتج النهائي لسلسلة نصية وإبقاء المتحول sum_all_rubber رقماً للنهاية

<?php

$sum_all_rubber = 0;

foreach ($rubbers AS $rubber){
  $total = (($rubber['countPiece'] * $rubber['colorNumber_input']) * $rubber['price']);
  /** @noinspection PhpWrongStringConcatenationInspection */
  $sum_all_rubber += $total;
}

$sum_all_rubber = number_format($sum_all_rubber,2);  // هنا التحويل
  
?>

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

أعتقد أن سبب المُشكلة هو في الدالة number_format المستخدمة فالدالة تُعيد سلسلة نصية و ليس عدد، حاول إستخدامها خارج الحلقة foreach مرة واحدة و بداخل الحلقة إستخدم جمع قيم المتغير total بشكل عادي.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Wael Aljamal:

أعتقد أن المشكلة في السطر 


$sum_all_rubber += number_format($total,2);

حيث أن number_format تعيد سلسلة نصية string وليس رقم، وعندما يصبح المجموع كبير تضيع للسلسة النصية محرف , مثلا


1,999.90

والذي لايجمع مع باقي الأعداد، لذلك حاول تحويل الناتج النهائي لسلسلة نصية وإبقاء المتحول sum_all_rubber رقماً للنهاية


<?php

$sum_all_rubber = 0;

foreach ($rubbers AS $rubber){
  $total = (($rubber['countPiece'] * $rubber['colorNumber_input']) * $rubber['price']);
  /** @noinspection PhpWrongStringConcatenationInspection */
  $sum_all_rubber += $total;
}

$sum_all_rubber = number_format($sum_all_rubber,2);  // هنا التحويل
  
?>

 

نعم ملاحظة هامة جدا لم انتبه لها 

و ايضا لم انتبه إلى ان هناك ارقام عشرية تدخل في الحساب فكان لابد من استخدام float

الحل كان تحويل الناتج النهائي لسلسلة نصية وإبقاء المتغير sum_all_rubber رقماً ثم استبدال 

            $total = (($rubber['countPiece'] * $rubber['colorNumber_input']) * $rubber['price']);

ب 

$total = ( (float)$rubber['colorNumber_input'] * $rubber['countPiece']) * $rubber['price'];

شكرا لكم جميعا 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...