خطا في القيم في العمليات الحسابية
#1
السلام عليكم ورحمة الله وبركاته

لدي مشكلة ظهور رسالة عند جمع عددين ذو انصاص ثم قسمتها على عدد 2
عندي كمبو بكس فيه اعداد من مية الى ثمانين ...
الكمبو الثاني نفس الاعداد من مية الى ثمانين ...
الناتج يكون سليم
لكن بالتكست الاخير اللي هو يجمع جميع العمليات وعند ظهور انصاص او غيره تظهر لي هالرسالة

Project1.exe raised exception class EConvertError with message "94.5"is not a vaild value.

كود الناتج النهائي
كود :
var a,b,c,d,e,f:integer; g:extended; begin a:=StrToInt(edit1.Text); b:=StrToInt(edit5.Text); c:=StrToInt(edit2.Text); d:=StrToInt(edit7.Text); e:=StrToInt(edit8.Text); f:=StrToInt(edit9.Text); g:=(a+b+c+d+e+f); edit10.Text:=formatFloat('0.##',g);



شاكر لكم مقدما
الرد
#2
السلام عليكم...

المشكلة ليست في الجملة الأخيرة، بل في واحدة أو أكثر من الجمل التي قبلها حيث تستعمل الدالة StrToInt. فإذا احتوت إحدى الـ Edit المذكورة على نص لا يمثل عدداً صحيحاً (مثلاً العدد 94.5 ليس عدداً صحيحاً) فإنه سيتسبب في حدوث خطأ بالرسالة التي ذكرتها.

الحل:
1. طالما أن القيم في مربعات النص قد تحتوي على كسور فاستعمل الدالة StrToFloat بدل StrToInt، مع تغيير نوع المتغيرات إلى Real أو Extended

كود :
a := StrToFloat(Edit1.Text);

2. أو - إذا كنت تريد التخلص من الكسور - فإما أن تستعمل الدالة Round لتقريب العدد الكسري، أو تستعمل الدالة Trun لحذف الكسر (كلتا الدالتين تعيد عدداً صحيحاً من النوع Int64):

كود :
a := Round(StrToFloat(Edit1.Text)); a := Trunc(StrToFloat(Edit1.Text));

* ملاحظة على الكود الأصلي: لا معنى لتعريف المتغير g كـ Extended و لا معنى لاستعمال الدالة FormatFloat بينما كل المتغيرات الداخلة في عملية الجمع من النوع Integer لأن النتيجة ستكون بالضرورة عدداً صحيحاً (طالما ليس هناك عملية قسمة).

نرجو الاستفادة و السلام.
الرد
#3
الكود صحيح
المشكل في المدخلات كما قال الاخ Najy Ibraheem
عليك با عمل دالة لي تفقد المحتوى اذا كان رقمي 0..9
الرد
#4
الشكر موصول للاخ ناجي ابراهيم والاخ الياس
ضبط الكود والحمد لله بمساعدتكم
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم