انتقل إلى محتوى الدرس
الدرس 17
دورة PHP

أوضاع التقريب الرياضية والقسمة الصحيحة والأرقام العشوائية الآمنة في PHPPHP Rounding Modes Integer Division and Secure Random Numbers

تحكم في أوضاع تقريب الكسور بـ round وceil وfloor، واحسب القسمة الصحيحة بـ intdiv وfmod، وولّد أرقاماً عشوائية آمنة بـ random_int.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تقوم الدالة ceil() دائماً بتقريب العدد للأعلى إلى أقرب عدد صحيح، بينما تقوم الدالة floor() دائماً بتقريب العدد للأسفل إلى أقرب عدد صحيح.

  • تُرجع كل من ceil() وfloor() قيمة من نوع float في PHP؛ لذا حوّل الناتج بـ (int) عندما تحتاج نوعاً صحيحاً.
  • حساب إجمالي صفحات التقسيم الصفحي يستخدم دائماً (int) ceil($totalItems / $perPage) لضمان صفحة للعناصر المتبقية.
  • مع الأعداد السالبة، تقرب ceil(-3.7) للأعلى باتجاه الصفر (-3.0)، بينما تقرب floor(-3.2) للأسفل بعيداً عن الصفر (-4.0).

قسمة 43 / 10 تنتج 4.3، وتقوم ceil() بتقريبها للأعلى إلى 5 صفحات لعرض العناصر الثلاثة الأخيرة.

مخطط توضيحي: محاكي أوضاع التقريب الرياضية والأرقام العشوائية التشفيرية في PHP
PHP
<?php
$totalItems = 43;
$perPage = 10;
$totalPages = (int) ceil($totalItems / $perPage);

echo "Pages needed: $totalPages\n";
echo "ceil(4.1)  = " . ceil(4.1) . " | floor(4.9) = " . floor(4.9) . "\n";
echo "ceil(-3.7) = " . ceil(-3.7) . " | floor(-3.2) = " . floor(-3.2) . "\n";

تقوم الدالة round($num, $precision, $mode) بتقريب العدد لعدد محدد من الخانات العشرية مع التحكم الكامل في كيفية معالجة القيم النصفية (.5).

  • الوضع الافتراضي PHP_ROUND_HALF_UP يقرب النصفي بعيداً عن الصفر (يقرب 2.5 إلى 3).
  • الوضع PHP_ROUND_HALF_DOWN يقرب القيمة النصفية باتجاه الصفر (يقرب 2.5 إلى 2).
  • الوضع المصرفي PHP_ROUND_HALF_EVEN يقرب القيم النصفية لأقرب رقم زوجي (كل من 1.5 و2.5 يقربان إلى 2) لمنع الانحياز الإحصائي في المحاسبة.

لاحظ كيف يقرب الوضع المصرفي PHP_ROUND_HALF_EVEN كلاً من 1.5 و2.5 إلى العدد الزوجي الأقرب 2.

PHP
<?php
$taxAmount = 14.3786;

echo "2 decimals: " . round($taxAmount, 2) . "\n";
echo "HALF_UP (2.5):   " . round(2.5, 0, PHP_ROUND_HALF_UP) . "\n";
echo "HALF_DOWN (2.5): " . round(2.5, 0, PHP_ROUND_HALF_DOWN) . "\n";
echo "HALF_EVEN (1.5): " . round(1.5, 0, PHP_ROUND_HALF_EVEN) . "\n";
echo "HALF_EVEN (2.5): " . round(2.5, 0, PHP_ROUND_HALF_EVEN) . "\n";

تُرجع القسمة العادية / في PHP عدداً عشرياً float عند وجود باقٍ؛ لذا استخدم intdiv($a, $b) للحصول على خارج القسمة الصحيح مباشرة، وfmod($x, $y) لباقي القسمة العشرية.

  • تُرجع intdiv(130, 60) العدد الصحيح int(2) مباشرة، وهي مثالية لتحويل الثواني إلى دقائق وساعات.
  • يحول معامل باقي القسمة % طرفيه إلى أعداد صحيحة، بينما تحافظ الدالة fmod(5.7, 1.2) على الكسور العشرية.
  • القسمة على صفر في intdiv($a, 0) تطلق خطأ DivisionByZeroError.

تُرجع intdiv(195, 60) العدد الصحيح 3 دقائق ويعطي 195 % 60 الباقي 15 ثانية، بينما تحسب fmod(5.7, 1.2) الباقي العشري 0.9.

PHP
<?php
$totalSeconds = 195;
$minutes = intdiv($totalSeconds, 60);
$seconds = $totalSeconds % 60;

$floatRem = round(fmod(5.7, 1.2), 2);

echo "Duration: {$minutes}m {$seconds}s\n";
echo "fmod(5.7, 1.2) = $floatRem\n";

تعالج الدوال المدمجة abs() وmin() وmax() وsqrt() ومعامل الأسس ** حساب المسافات وتقييد الحدود والجذور التربيعية بسهولة.

  • تُرجع abs($n) القيمة المطلقة الموجبة للعدد الصحيح أو العشري (مثلاً abs(-42) تُرجع 42).
  • دمج min(100, max(0, $score)) يحصر أي رقم ضمن النطاق 0..100 مباشرة بدون جمل شرطية!
  • تُرجع sqrt(81) الجذر التربيعي float(9)، ويحسب المعامل 2 ** 10 القيمة 1024.

تحول abs(120 - 175) الناتج -55 إلى 55، وتقيد min(100, max(0, 118)) الدرجة عند السقف 100، وتحسب sqrt() الوتر 5.

مخطط تدفق التنفيذ العملي لقسم القيمة المطلقة abs والحدود min و max والجذر sqrt في لغة PHP
PHP
<?php
$delta = abs(120 - 175);
$rawScore = 118;
$clamped = min(100, max(0, $rawScore));
$hypotenuse = sqrt((3 ** 2) + (4 ** 2));

echo "Delta: $delta | Clamped: $clamped\n";
echo "Hypotenuse: $hypotenuse\n";

استخدم دائماً دوال التوليد العشوائي الآمن تشفيرياً (CSPRNG) في PHP وهي random_int($min, $max) وrandom_bytes($length) لتوليد رموز التحقق والتوكنات الأمنية.

  • تولّد random_int(100000, 999999) عدداً صحيحاً من 6 أرقام غير قابل للتوقع وآمن تشفيرياً.
  • تولّد bin2hex(random_bytes(8)) ثمانية بايتات عشوائية آمنة وتحولها إلى سلسلة ست عشرية طولها 16 حرفاً.
  • الدوال القديمة rand() وmt_rand() قابلة للتنبؤ حسابياً ولا يجوز استخدامها أبداً في رموز التحقق أو التوكنات.

تضمن random_int(100000, 999999) رقماً صحيحاً شاملاً للحدين، وتضاعف bin2hex(random_bytes(8)) عدد البايتات الثمانية لتنتج 16 حرفاً ست عشرياً.

PHP
<?php
$otpCode = random_int(100000, 999999);
$tokenHex = bin2hex(random_bytes(8));

var_dump($otpCode >= 100000 && $otpCode <= 999999);
echo "Token length: " . strlen($tokenHex) . "\n";

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

  • تذكر أن ceil() وfloor() وround() تُرجع جميعاً نوعاً عشرياً float، بينما تُرجع intdiv() وrandom_int() عدداً صحيحاً int.
  • استخدم PHP_ROUND_HALF_EVEN للتقريب المحاسبي الإحصائي وPHP_ROUND_HALF_UP للعرض التجاري المعتاد.
  • تذكر قاعدة bin2hex(random_bytes($n)): تمرير $n بايت ينتج دائماً سلسلة نصية طولها $n * 2 حرفاً.

لتوزيع 25 عنصراً في صناديق تسع 6 عناصر، تعطي intdiv(25, 6) عدد الصناديق الممتلئة بالكامل (4)، وتعطي ceil() إجمالي الصناديق اللازمة (5).

الدالةنوع النتيجةملخص السلوكمثال النتيجة
ceil($num)floatRounds UP toward +infinityceil(4.1) -> 5.0
floor($num)floatRounds DOWN toward -infinityfloor(4.9) -> 4.0
round($num, $p, $mode)floatRounds to $p decimals using $moderound(2.5) -> 3.0
intdiv($a, $b)intTruncated integer quotient of $a / $bintdiv(17, 5) -> 3
fmod($x, $y)floatFloating-point modulo remainderfmod(5.7, 1.2) -> 0.9
random_int($min, $max)intCSPRNG inclusive random integer100000..999999
PHP
<?php
$items = 25;
$boxSize = 6;

$fullBoxes = intdiv($items, $boxSize);
$totalBoxes = (int) ceil($items / $boxSize);

echo "Full boxes: $fullBoxes | Total boxes: $totalBoxes\n";
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

استخدم هذا الجدول المرجعي لاختيار دالة التقريب أو القسمة أو التوليد العشوائي المناسبة لعمليتك الحسابية. تذكر أن ceil() وfloor() وround() تُرجع جميعاً نوعاً عشرياً float، بينما تُرجع intdiv() وrandom_int() عدداً صحيحاً int. استخدم PHP_ROUND_HALF_EVEN للتقريب المحاسبي الإحصائي وPHP_ROUND_HALF_UP للعرض التجاري المعتاد. تذكر قاعدة bin2hex(random_bytes($n)): تمرير $n بايت ينتج دائماً سلسلة نصية طولها $n * 2 حرفاً.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Rounding & CSPRNG التقريب والعشوائية الآمنة
تحكم في أوضاع تقريب الكسور بـ round وceil وfloor، واحسب القسمة الصحيحة بـ intdiv وfmod، وولّد أرقاماً عشوائية آمنة بـ random_int.
للمراجعة
02 ceil and floor Directional Rounding التقريب للأعلى بـ ceil وللأسفل بـ floor
المفهوم الأساسي لقسم التقريب للأعلى بـ ceil وللأسفل بـ floor في لغة PHP الحديثة.
للمراجعة
03 Precision and Modes in round التحكم في الدقة وأوضاع التقريب الأربعة في round
الصياغة البرمجية والتطبيق العملي المباشر لقسم التحكم في الدقة وأوضاع التقريب الأربعة في round.
للمراجعة
04 Integer Division and Float Modulo القسمة الصحيحة intdiv وباقي القسمة العشرية fmod
قواعد التحقق وأفضل الممارسات القياسية الخاصة بقسم القسمة الصحيحة intdiv وباقي القسمة العشرية fmod.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 PHP PHP
PHP: Hypertext Preprocessor
لغة البرمجة النصية على جانب الخادم لبناء تطبيقات الويب الديناميكية وواجهات البرمجة.
للمراجعة
02 CLI CLI
Command-Line Interface
واجهة سطر الأوامر التي تتيح تشغيل ملفات PHP مباشرة عبر الطرفية.
للمراجعة
03 FPM FPM
FastCGI Process Manager
مدير عمليات FastCGI عالي الأداء لمعالجة طلبات خادم الويب في PHP.
للمراجعة
04 HTML HTML
HyperText Markup Language
لغة الترميز القياسية التي يولدها محرك PHP ويرسلها إلى متصفح العميل بعد التنفيذ.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. أنشئ ملف PHP محلياً ونفّذ المثال البرمجي المشروح في قسم التقريب للأعلى بـ ceil وللأسفل بـ floor للتحقق من المخرجات.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم التحكم في الدقة وأوضاع التقريب الأربعة في round وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما هو نوع البيانات الذي تُرجعه الدوال ceil() و floor() و round() في PHP؟

تُرجع دوال التقريب الثلاث دائماً قيمة من نوع float، ويمكن تحويلها بـ (int) عند الحاجة.

02

ما نتيجة استدعاء كل من ceil(-3.2) و floor(-3.2) في PHP؟

على خط الأعداد يكون -3 أكبر من -3.2 (لأعلى)، ويكون -4 أصغر من -3.2 (لأسفل).

03

ماذا تُرجع الدالة round(2.5, 0, PHP_ROUND_HALF_EVEN)؟

يقرب وضع PHP_ROUND_HALF_EVEN القيمة النصفية 2.5 إلى الرقم الزوجي الأقرب وهو 2.

04

أي دالة تُرجع خارج القسمة الصحيح مباشرة لعملية قسمة 17 على 5 (وهو int(3))؟

تنفذ intdiv(17, 5) القسمة الصحيحة وتُرجع العدد الصحيح int(3).

05

لماذا يجب استخدام الدالة fmod(5.7, 1.2) بدلاً من المعامل 5.7 % 1.2 لحساب باقي قسمة الأعداد العشرية؟

المعامل % مخصص للأعداد الصحيحة فقط في PHP، بينما تتعامل fmod() مع الكسور العشرية بدقة.

06

كم حرفاً ست عشرياً (Hexadecimal) تُرجعه العبارة bin2hex(random_bytes(16))؟

كل بايت يتحول إلى حرفين في النظام الست عشري، فيصبح 16 بايت مساوياً لـ 32 حرفاً.

07

أي دالة يجب استخدامها لتوليد رمز تحقق عشوائي آمن تشفيرياً (OTP) مكون من 6 أرقام في PHP؟

تعتمد random_int() على مولد نظام التشغيل التشفيري الآمن CSPRNG.

08

ما ناتج تقييم العبارة min(100, max(0, -15))؟

هذا التعبير يقيد أي رقم ليبقى داخل النطاق المغلق من 0 إلى 100.