تقنية

Decimal في بايثون: هل copy_abs مثل abs مع دقة صغيرة؟

copy_abs تحفظ القيمة 7.125
نسخ دون تقريب. [1] [2]

نسخ القيمة المطلقة وحسابها بالسياق يختلفان هنا. [1] [2]

الخلاصة السريعة

لا؛ copy_abs لا تقرب، بينما abs تطبق السياق في مثالنا. [1] [2]

  • أنشأنا x من النص -7.125. [1] [2]
  • ضبطنا الدقة 2 والتقريب ROUND_HALF_EVEN. [1] [2]
  • x.copy_abs() تطبع 7.125. [1] [2]
  • abs(x) تطبع 7.1. [1] [2]
  • اختبرنا 3.12.14 وقيمًا منتهية دون float. [1] [2]

المثال

from decimal import Decimal,localcontext,ROUND_HALF_EVEN
x=Decimal('-7.125')
with localcontext() as ctx:
 ctx.prec=2
 ctx.rounding=ROUND_HALF_EVEN
 print(x.copy_abs())
 print(abs(x))

[1] [2]

المساران

المصدر هنا ينسخ القيمة المطلقة دون تمرير سياق الحساب، بينما يمرر السياق لعملية abs. يظل العدد الأصلي كما هو. تؤكد الوثائق أن النسخ لا يغير أعلام السياق أو يقرب. [1] [2]

abs تطبق الدقة 2 فتعطي 7.1
سياق بدقة 2. [1] [2]

النطاق

دقة السياق تعد الخانات المعنوية، لا المنازل العشرية فقط. يستعيد localcontext السياق السابق عند الخروج. لا نختبر قيمًا خاصة أو نقترح قاعدة لحساب مالي. [1] [2]

المراجع

  1. Python 3.12: Decimal copy_abs/context
  2. CPython 3.12.14: native Decimal unary operations
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.