كتابة precision=2 لا تكفي وحدها لفهم نص عشري تنتجه format_float_positional. للقيمة 13.25 حصلنا على "13.25" في إعداد، و"13." في الآخر؛ بقي العدد الأصلي نفسه. سنثبت بقية الخيارات ونغير fractional، ثم نراجع مثالًا أكبر وتحكمًا صغيرًا تتفق فيه النتيجتان.
معنى العدد 2
fractional=True يحد precision بعد النقطة؛ False يحد الأرقام المعنوية دون الأصفار البادئة. [1]
نثبت unique=False؛ تولد الخانات إلى الحد المحدد وتقرّب الباقي. [1]
ونثبت trim="k"؛ يحفظ الأصفار الأخيرة والنقطة. [1]
هذا تنسيق يعيد نصًا. أما round فتوثق تقريبًا عدديًا بعدد منازل، وناتج تقريب float هو float. [2] قرأنا التعريف للتمييز، ولم نشغل round في التجربة.
يوفر Fraction كسرًا من بسط ومقام، ويمكن إنشاؤه من float بالقيمة نفسها بالضبط. [3] استخدمناه لفحص مدخلاتنا ولبناء المرجع، دون توليد التوقع بدالة التنسيق المختبرة.
المثال 13.25
شغلنا NumPy 2.3.5 على CPython 3.12.14. مدخلنا x=13.25 من Python float، واخترناه من الكسر 53/4. تحققنا قبل التنسيق من أن Fraction(x) يساوي هذا الكسر؛ ليست القيمة قياسًا أو سعرًا.
نفذنا np.format_float_positional(x,precision=2,unique=False,fractional=True,trim="k"). أعاد النص "13.25" من نوع str. بعد النقطة خانتان، 2 ثم 5، كما طلبنا في هذا المسار.
كررنا الاستدعاء على x الأصلي، مع fractional=False وبقية الخيارات نفسها. كان النص "13."؛ الرقمان المحتفظ بهما 1 و3 قبل النقطة. لم يطلب هذا الإعداد خانتين بعدها.
في مرجعنا، 13.25 أقرب إلى 13 منه إلى 14: المسافتان 0.25 و0.75. ولأن الجزء الصحيح هنا من خانتين، يصبح الاحتفاظ برقمين معنويين اختيارًا عند الآحاد. هذه حالة بعيدة عن المنتصف.
النقطة الباقية في "13." تتفق مع خيار trim الذي ثبتناه. لم نعِد النص الأول مدخلًا للاستدعاء الثاني؛ كلا المسارين انطلق من x. وحفظنا بايتات القيمة قبل التنسيق وبعده فبقيت ثابتة.
الحجم والتحكم الصغير
أضفنا y=317.25، من الكسر 1269/4، وبالإعدادين نفسيهما. أعاد المسار الكسري "317.25"، بينما أعاد مسار الرقمين المعنويين "320.". نوع النتيجتين str أيضًا.
في المرجع، نحتفظ لأول رقمين من قيمة بين 100 و1000، فتكون خطوة الاختيار عشرة. 317.25 يبعد 2.75 عن 320 و7.25 عن 310؛ لذلك نختار 320. الصفر يحفظ المنزلة في الكتابة الموضعية؛ لا نحذف خانته لنكتب 32.
لا نفسر ظهور ثلاث خانات رقمية في "320." كطلب ثلاثة أرقام معنوية من الدالة. العدد المكتوب يحتاج خانة الآحاد الصفرية لكي يحتفظ بقيمة 320، والإعداد الذي سجلناه هو precision=2 مع fractional=False.
للتحكم الصغير اخترنا z=17/128، أي 0.1328125 الممثلة بدقة في مدخلنا. أعاد الإعدادان النص "0.13". أول رقم غير صفري هنا بعد النقطة مباشرة، لذلك يلتقي حد المنزلتين مع حد الرقمين المعنويين في هذا المثال.
اتفاق التحكم لا يجعل الخيارين متكافئين. احتفظ بالعدد الأصلي وبأسماء precision وfractional وunique وtrim بجانب النص؛ ومن النصوص وحدها لا نستنتج دقة جهاز أو عدد خانات قياس يستحقها تقرير علمي.

عد النصوص والحدود
أنشأنا القيم 13.25+k لكل k صحيح من 0 إلى 16، فصار لدينا 17 مدخلًا. أضفنا 317.25 و17/128؛ المجموع 19 قيمة مختلفة عدديًا وببايتاتها، وكلها موجبة منتهية من Python float وممثلة بدقة من الكسور المعلنة.
استدعينا الدالة مرتين لكل مدخل مع تغيير fractional وحده، فحفظنا 19×2=38 نصًا. اختلف النصان في القيم السبع عشرة وفي التحكم الكبير، واتفقا في التحكم الصغير وحده. حسابات المرجع وبيانات المدخل ليست مخارج أصلية إضافية.
حدد المرجع مرتبة الكسر بمقارنته بقوى عشرة صحيحة. في المسار الكسري اختار منزلتين؛ وفي مسار الرقمين المعنويين اختار المنزلة التي تناسب المرتبة، ثم قارن باقي القسمة بنصف المقام ليختار الأقرب.
تحققنا من عدم وجود تعادل في الحالات كلها. بنى المرجع الخانات من الأعداد الصحيحة والنقطة والأصفار المطلوبة، ولم يستعمل دالة NumPy المختبرة أو Python round أو format. تطابقت النصوص الثمانية والثلاثون كاملة مع التوقع المحسوب قبل الاستدعاءات.
لم نفحص تعادل المنتصف أو الصفر أو السوالب أو القيم الخاصة أو أنواع NumPy العائمة الأخرى أو المصفوفات، ولا precision آخر أو unique=True أو بقية خيارات trim والحشو والأداء. لم نحلل تنفيذ Dragon4. الدليل هنا عن الإعداد والمدخلات المسجلين؛ سم معنى عد الخانات قبل نقل النص.
| Input float | fractional=True | fractional=False |
|---|---|---|
| 13.25 | 13.25 | 13. |
| 317.25 | 317.25 | 320. |
| 0.1328125 | 0.13 | 0.13 |
للتوسع: قراءة الأرقام المعنوية.
المراجع
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
