سؤال حول دالة التقريب
#1
السلام عليكم
اخوتي ماهي دالة التقريب الى أعلى رقم  داخل QRExpr في QuickRep في الدلفين
وشكرا
الرد
#2
في QuickRep في دلفي، لا توجد دالة مدمجة مباشرة في QRExpr تقوم بالتقريب إلى أعلى رقم (Ceiling) بنفس طريقة Math.Ceil في وحدات Delphi القياسية.

ومع ذلك، يمكنك تحقيق ذلك باستخدام بعض الحيل الرياضية البسيطة ضمن تعبير QRExpr:

استخدام دالة INT مع الجمع:
يمكنك استخدام الدالة INT (التي تقوم بالتقريب إلى أقرب عدد صحيح لأسفل) ودمجها مع عملية الجمع. إذا كان الرقم ليس عددًا صحيحًا، فستضيف 1 إلى الجزء الصحيح.

الصيغة:
INT(YourFieldName + 0.99999999999) أو INT(YourExpression + 0.99999999999)

الشرح:

INT(X): تقوم بتقريب X إلى أقرب عدد صحيح أقل من أو يساوي X.
بإضافة قيمة صغيرة جدًا (مثل 0.99999999999) إلى الرقم الأصلي، فإنك تضمن أن أي رقم يحتوي على جزء عشري (حتى لو كان 0.00000000001) سيصبح أكبر من العدد الصحيح التالي، مما يجعل INT تقربه إلى أعلى.
مثال:
إذا كان لديك حقل يسمى TotalAmount وتريد تقريبه إلى أعلى:
INT(TotalAmount + 0.99999999999)

إذا كان TotalAmount = 10.1، يصبح 10.1 + 0.99999999999 = 11.09999999999، و INT(11.09999999999) = 11.
إذا كان TotalAmount = 10.0، يصبح 10.0 + 0.99999999999 = 10.99999999999، و INT(10.99999999999) = 10. (لاحظ أن هذا يعمل بشكل صحيح للتقريب للأعلى فقط إذا كان هناك جزء عشري).
استخدام Round و Ceil في كود دلفي ثم إرسال القيمة إلى QRExpr (إذا كان ذلك ممكنًا):
إذا كنت تقوم بإنشاء التقرير برمجياً، يمكنك حساب القيمة المقربة باستخدام Ceil في كود دلفي الخاص بك (من الوحدة Math)، ثم تمرير هذه القيمة إلى QRExpr.

مثال في كود دلفي:

كود :
uses Math; // تأكد من إضافة وحدة Math var   MyCalculatedValue: Double;   CeiledValue: Double; begin   MyCalculatedValue := YourDataset['YourFieldName']; // أو أي حساب آخر   CeiledValue := Ceil(MyCalculatedValue);   // الآن يمكنك تعيين CeiledValue إلى TQRExpr في تقريرك   // على سبيل المثال، إذا كان لديك TQRExpr يسمى QRExpr1:   // QRExpr1.Expression := FloatToStr(CeiledValue); // أو ربطها بمتغير QuickRep end;


ثم في QRExpr، يمكنك عرض هذا المتغير.

أي طريقة تختار؟

إذا كنت تفضل أن تكون جميع العمليات داخل QRExpr مباشرة، فإن الطريقة الأولى (باستخدام INT مع الجمع) هي الأنسب.
إذا كانت لديك حسابات معقدة أو تفضل استخدام دوال Delphi القياسية للتقريب، فإن الطريقة الثانية (التقريب في الكود ثم تمرير القيمة) ستكون أفضل.
بشكل عام، الطريقة الأولى هي الأكثر شيوعًا ومباشرة لتحقيق التقريب إلى أعلى داخل QRExpr.

في QuickReport (المستخدم في دلفي)، عند التعامل مع التعبيرات (QRExpr) للتقريب إلى أعلى (Round Up)، يمكنك استخدام الدالة CEIL أو ROUNDUP حسب الإصدار والمكونات المتاحة.

الطرق الشائعة للتقريب إلى أعلى في QRExpr:
استخدام CEIL (تقريب إلى أقرب عدد صحيح أكبر)
مثال:
كود :
QRExpr1.Expression := 'CEIL(FieldName)';
أو مع معاملات:

كود :
QRExpr1.Expression := 'CEIL(FieldName / 10) * 10'; // للتقريب لأقرب عشرين

استخدام ROUNDUP (إذا كانت مدعومة)
بعض الإصدارات تدعم ROUNDUP مشابهة لإكسل:

كود :
QRExpr1.Expression := 'ROUNDUP(FieldName, 0)'; // الصفر يعني منزلة عشرية صفرية (تقريب صحيح)

إذا لم تكن الدالة متاحة، استخدم تعبيرًا رياضيًا
مثال للتقريب لأعلى بعد القسمة:

كود :
QRExpr1.Expression := 'INT(FieldName + 0.999)'; // خدعة بسيطة


ملاحظات:
تأكد من أن اسم الحقل (FieldName) مطابق لما في قاعدة البيانات.

بعض الدوال قد لا تكون مدعومة في كل إصدارات QuickReport، لذا جرب البدائل.

يمكنك استخدام Format في دلفي نفسه قبل تعبئة التقرير إذا واجهتك مشاكل.

إذا كنت تستخدم إصدارًا حديثًا من دلفي مع مكونات تقارير أخرى (مثل FastReport)، فقد تتوفر لديك خيارات أكثر مرونة.
إذا رأيت منتجاً مجانياً فأعلم بأنك أنت السّلعة
الرد


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


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