> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> توثيق دوال التقريب

# دوال التقريب

<Note>
  تم إنشاء الوثائق أدناه من جدول النظام `system.functions`
</Note>

{/*AUTOGENERATED_START*/}

<div id="ceil">
  ## ceil
</div>

أُضيف في: v1.1.0

مثل [`floor`](#floor)، لكنه يعيد أصغر عدد مُقرَّب أكبر من أو يساوي `x`.
إذا أدّى التقريب إلى تجاوز السعة (على سبيل المثال، `ceiling(255, -1)`)، تكون النتيجة غير معرّفة.

**الصياغة**

```sql theme={null}
ceiling(x[, N])
```

**الأسماء البديلة**: `ceiling`

**الوسيطات**

* `x` — القيمة المراد تقريبها. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)
* `N` — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي صفر، ما يعني التقريب إلى عدد صحيح. ويمكن أن تكون سالبة. [`(U)Int*`](/ar/reference/data-types/int-uint)

**القيمة المُعادة**

يعيد عددًا مُقرَّبًا من النوع نفسه لـ `x`. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT ceiling(123.45, 1) AS rounded
```

```response title=Response theme={null}
┌─rounded─┐
│   123.5 │
└─────────┘
```

**الدقة السالبة**

```sql title=Query theme={null}
SELECT ceiling(123.45, -1)
```

```response title=Response theme={null}
┌─ceiling(123.45, -1)─┐
│                 130 │
└─────────────────────┘
```

<div id="floor">
  ## floor
</div>

أُضيف في: v1.1.0

يعيد أكبر عدد مُقرَّب أصغر من `x` أو مساوياً له، بحيث يكون العدد المُقرَّب من مضاعفات `1 / 10 * N`، أو أقرب عدد من نوع البيانات المناسب إذا لم تكن `1 / 10 * N` قيمة دقيقة.

يمكن تقريب الوسيطات الصحيحة باستخدام وسيطة `N` سالبة.
أما إذا كانت `N` غير سالبة، فتعيد الدالة `x`.

إذا أدى التقريب إلى تجاوز السعة (على سبيل المثال، `floor(-128, -1)`)، فإن النتيجة غير معرّفة.

**الصياغة**

```sql theme={null}
floor(x[, N])
```

**الوسيطات**

* `x` — القيمة المطلوب تقريبها. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)
* `N` — اختياري. عدد المنازل العشرية المراد التقريب إليها. القيمة الافتراضية هي صفر، ما يعني التقريب إلى عدد صحيح. يمكن أن تكون سالبة. [`(U)Int*`](/ar/reference/data-types/int-uint)

**القيمة المعادة**

يعيد عددًا مقرَّبًا من النوع نفسه لـ `x`. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)

**أمثلة**

**مثال للاستخدام**

```sql title=Query theme={null}
SELECT floor(123.45, 1) AS rounded
```

```response title=Response theme={null}
┌─rounded─┐
│   123.4 │
└─────────┘
```

**الدقة السالبة**

```sql title=Query theme={null}
SELECT floor(123.45, -1)
```

```response title=Response theme={null}
┌─floor(123.45, -1)─┐
│               120 │
└───────────────────┘
```

<div id="round">
  ## round
</div>

أُضيف في: v1.1.0

تقرّب هذه الدالة قيمة إلى عدد محدد من المنازل العشرية `N`.

* إذا كانت `N > 0`، فتقرّب الدالة إلى يمين الفاصلة العشرية.
* إذا كانت `N < 0`، فتقرّب الدالة إلى يسار الفاصلة العشرية.
* إذا كانت `N = 0`، فتقرّب الدالة إلى أقرب عدد صحيح.

تعيد الدالة أقرب عدد في المرتبة المحددة.
إذا كانت قيمة الإدخال على بُعد متساوٍ من عددين متجاورين، تستخدم الدالة تقريب المصرفيين لمدخلات `Float*`، وتقرّب بعيدًا عن الصفر لأنواع الأعداد الأخرى (`Decimal*`).

إذا أدى التقريب إلى تجاوز السعة (على سبيل المثال، `round(255, -1)`)، فالنتيجة غير معرّفة.

**الصياغة**

```sql theme={null}
round(x[, N])
```

**الوسيطات**

* `x` — رقم يُراد تقريبه. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)
* `N` — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي `0`. [`(U)Int*`](/ar/reference/data-types/int-uint)

**القيمة المُعادة**

يعيد رقمًا مُقرَّبًا من النوع نفسه مثل `x`. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)

**أمثلة**

**مدخلات Float**

```sql title=Query theme={null}
SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3;
```

```response title=Response theme={null}
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        0 │
│   1 │        1 │
└─────┴──────────┘
```

**قيم الإدخال من نوع Decimal**

```sql title=Query theme={null}
SELECT cast(number / 2 AS  Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3;
```

```response title=Response theme={null}
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        1 │
│   1 │        1 │
└─────┴──────────┘
```

<div id="roundAge">
  ## roundAge
</div>

أُضيفت في: v1.1.0

تأخذ رقمًا يمثّل عمر إنسان، وتقارنه بالفئات العمرية القياسية، ثم تُرجع إما الحد الأدنى أو الحد الأعلى للفئة العمرية التي يقع ضمنها هذا الرقم.

* تُرجع `0` عندما يكون `age < 1`.
* تُرجع `17` عندما يكون `1 ≤ age ≤ 17`.
* تُرجع `18` عندما يكون `18 ≤ age ≤ 24`.
* تُرجع `25` عندما يكون `25 ≤ age ≤ 34`.
* تُرجع `35` عندما يكون `35 ≤ age ≤ 44`.
* تُرجع `45` عندما يكون `45 ≤ age ≤ 54`.
* تُرجع `55` عندما يكون `age ≥ 55`.

**الصياغة**

```sql theme={null}
roundAge(num)
```

**الوسيطات**

* `age` — رقم يمثّل عمرًا بالسنوات. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

**القيمة المُعادة**

يعيد إما أعلى عمر أو أدنى عمر للنطاق الذي يقع ضمنه `age`. [`UInt8`](/ar/reference/data-types/int-uint)

**أمثلة**

**مثال على الاستخدام**

```sql title=Query theme={null}
SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72);
```

```response title=Response theme={null}
┌─number─┬─roundAge(number)─┐
│      0 │                0 │
│      5 │               17 │
│     20 │               18 │
│     31 │               25 │
│     37 │               35 │
│     54 │               45 │
│     72 │               55 │
└────────┴──────────────────┘
```

<div id="roundBankers">
  ## roundBankers
</div>

أُضيف في: v20.1.0

يقرّب عددًا إلى منزلة عشرية محددة `N`.
إذا كانت قيمة التقريب تقع تمامًا في المنتصف بين عددين، فتستخدم الدالة أسلوب تقريب يُسمّى تقريب المصرفيين، وهو أسلوب التقريب الافتراضي للأعداد ذات الفاصلة العائمة المعرّفة وفق IEEE 754.

* إذا كانت `N > 0`، فإن الدالة تقرّب إلى يمين الفاصلة العشرية
* إذا كانت `N < 0`، فإن الدالة تقرّب إلى يسار الفاصلة العشرية
* إذا كانت `N = 0`، فإن الدالة تقرّب إلى أقرب عدد صحيح

<Info>
  **ملاحظات**

  * عندما تقع قيمة التقريب تمامًا في المنتصف بين عددين، تُقرَّب إلى أقرب رقم زوجي عند المنزلة العشرية المحددة.
    على سبيل المثال: يُقرَّب `3.5` إلى الأعلى ليصبح `4`، ويُقرَّب `2.5` إلى الأسفل ليصبح `2`.
  * تُجري الدالة `round` التقريب نفسه للأعداد ذات الفاصلة العائمة.
  * تقوم الدالة `roundBankers` أيضًا بتقريب الأعداد الصحيحة بالطريقة نفسها، على سبيل المثال: `roundBankers(45, -1) = 40`.
  * في الحالات الأخرى، تقرّب الدالة الأعداد إلى أقرب عدد صحيح.
</Info>

<Tip>
  **استخدم تقريب المصرفيين عند جمع الأعداد أو طرحها**

  باستخدام تقريب المصرفيين، يمكنك تقليل أثر تقريب الأعداد في نتائج جمعها أو طرحها.

  على سبيل المثال، اجمع الأعداد `1.5, 2.5, 3.5, 4.5` باستخدام أساليب تقريب مختلفة:

  * من دون تقريب: `1.5 + 2.5 + 3.5 + 4.5 = 12`.
  * تقريب المصرفيين: `2 + 2 + 4 + 4 = 12`.
  * التقريب إلى أقرب عدد صحيح: `2 + 3 + 4 + 5 = 14`.
</Tip>

**الصياغة**

```sql theme={null}
roundBankers(x[, N])
```

**الوسيطات**

* `x` — رقم يُراد تقريبه. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`Float*`](/ar/reference/data-types/float)
* `[, N]` — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي `0`. [`(U)Int*`](/ar/reference/data-types/int-uint)

**القيمة المُعادة**

تُعيد قيمةً مُقرَّبة باستخدام أسلوب تقريب المصرفيين. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`Float*`](/ar/reference/data-types/float)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10
```

```response title=Response theme={null}
┌───x─┬─b─┐
│   0 │ 0 │
│ 0.5 │ 0 │
│   1 │ 1 │
│ 1.5 │ 2 │
│   2 │ 2 │
│ 2.5 │ 2 │
│   3 │ 3 │
│ 3.5 │ 4 │
│   4 │ 4 │
│ 4.5 │ 4 │
└─────┴───┘
```

<div id="roundDown">
  ## roundDown
</div>

أُضيف في: v20.1.0

يقرّب عددًا نزولًا إلى أحد عناصر المصفوفة المحددة.
إذا كانت القيمة أقل من الحد الأدنى، فسيُعاد الحد الأدنى.

**الصياغة**

```sql theme={null}
roundDown(num, arr)
```

**الوسيطات**

* `num` — رقم يُراد تقريبه نزولًا. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`Float*`](/ar/reference/data-types/float)
* `arr` — مصفوفة من العناصر التي يُقرَّب `num` نزولًا إلى أحدها. [`Array((U)Int*)`](/ar/reference/data-types/array) أو [`Array(Float*)`](/ar/reference/data-types/array)

**القيمة المعادة**

يُرجع رقمًا مُقرَّبًا نزولًا إلى أحد العناصر في `arr`. إذا كانت القيمة أقل من الحد الأدنى، فسيُرجع الحد الأدنى. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

**الأمثلة**

**مثال على الاستخدام**

```sql title=Query theme={null}
SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5)
```

```response title=Response theme={null}
┌─number─┬─roundDown(number, [3, 4, 5])─┐
│      0 │                            3 │
│      1 │                            3 │
│      2 │                            3 │
│      3 │                            3 │
│      4 │                            4 │
│      5 │                            5 │
└────────┴──────────────────────────────┘
```

<div id="roundDuration">
  ## roundDuration
</div>

أُضيف في: v1.1.0

يُقرِّب عددًا إلى الأسفل إلى أقرب قيمة ضمن مجموعة من المدد شائعة الاستخدام: `1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`.
إذا كان العدد أقل من واحد، فستكون القيمة المعادة `0`.

**الصيغة**

```sql theme={null}
roundDuration(num)
```

**الوسيطات**

* `num` — رقم يُقرَّب إلى أحد الأرقام ضمن مجموعة المدد الشائعة. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

**القيمة المُعادة**

يعيد `0` إذا كان `num` \< 1. وإلا، فيعيد إحدى القيم التالية: `1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000`. [`UInt16`](/ar/reference/data-types/int-uint)

**أمثلة**

**مثال على الاستخدام**

```sql title=Query theme={null}
SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573)
```

```response title=Response theme={null}
┌─number─┬─roundDuration(number)─┐
│      0 │                     0 │
│      9 │                     1 │
│     19 │                    10 │
│     47 │                    30 │
│    101 │                    60 │
│    149 │                   120 │
│    205 │                   180 │
│    271 │                   240 │
│    421 │                   300 │
│    789 │                   600 │
│   1423 │                  1200 │
│   2345 │                  1800 │
│   4567 │                  3600 │
│   9876 │                  7200 │
│  24680 │                 18000 │
│  42573 │                 36000 │
└────────┴───────────────────────┘
```

<div id="roundToExp2">
  ## roundToExp2
</div>

تم تقديمه في: v1.1.0

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

**الصيغة**

```sql theme={null}
roundToExp2(num)
```

**الوسيطات**

* `num` — العدد المراد تقريبه. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

**القيمة المعادة**

يعيد `num` بعد تقريبه نزولًا إلى أقرب قوة للعدد اثنين (عدد صحيح غير سالب)، وإلا يعيد `0` إذا كان `num < 1`. [`(U)Int*`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float)

**أمثلة**

**مثال على الاستخدام**

```sql title=Query theme={null}
SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50)
```

```response title=Response theme={null}
┌─number─┬─roundToExp2(number)─┐
│      0 │                   0 │
│      2 │                   2 │
│      5 │                   4 │
│     10 │                   8 │
│     19 │                  16 │
│     50 │                  32 │
└────────┴─────────────────────┘
```

<div id="trunc">
  ## trunc
</div>

قُدِّم في: v1.1.0

مثل [`floor`](#floor)، لكنه يعيد العدد المقرَّب ذي أكبر قيمة مطلقة تكون أقل من أو مساوية للقيمة المطلقة لـ `x`.

**الصيغة**

```sql theme={null}
truncate(x[, N])
```

**الأسماء البديلة**: `truncate`

**الوسيطات**

* `x` — القيمة المطلوب تقريبها. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)
* `N` — اختياري. عدد المنازل العشرية المطلوب التقريب إليها. القيمة الافتراضية هي صفر، ما يعني التقريب إلى عدد صحيح. [`(U)Int*`](/ar/reference/data-types/int-uint)

**القيمة المُعادة**

يعيد عددًا مقربًا من النوع نفسه لـ `x`. [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`(U)Int*`](/ar/reference/data-types/int-uint)

**أمثلة**

**الاستخدام الأساسي**

```sql title=Query theme={null}
SELECT truncate(123.499, 1) AS res;
```

```response title=Response theme={null}
┌───res─┐
│ 123.4 │
└───────┘
```
