C# Programming

إتقان تقريب الأعداد العشرية في C#

Spread the love

تُعَدُّ عملية تقريب القيم العشرية جانبًا بالغ الأهمية في العديد من تطبيقات C#، خاصة عند التعامل مع الحسابات المالية أو عرض البيانات للمستخدمين. تتناول هذه المقالة طريقتين أساسيتين لتحقيق ذلك: decimal.Round() و Math.Round()، مع تسليط الضوء على اختلافاتهما وإرشادك لاختيار النهج الأمثل لاحتياجاتك المحددة.

جدول المحتويات

تقريب الأعداد العشرية باستخدام decimal.Round()

تم تصميم طريقة decimal.Round() خصيصًا لتقريب القيم العشرية، وهي توفر تحكمًا أفضل في عملية التقريب. تتمثل إحدى الميزات الرئيسية في قدرتها على تحديد إستراتيجية MidpointRounding، التي تحدد كيفية التعامل مع القيم التي تقع تمامًا في منتصف الطريق بين قيمتين مُقَرَّبتين محتملتين. هناك إستراتيجيتان شائعتان هما:

  • MidpointRounding.AwayFromZero (افتراضي): يُقَرِّب القيمة المتوسطة بعيدًا عن الصفر. على سبيل المثال، يُقَرَّب 2.5 إلى 3، و -2.5 يُقَرَّب إلى -3.
  • MidpointRounding.ToEven: يُقَرِّب القيمة المتوسطة إلى أقرب عدد زوجي. على سبيل المثال، يُقَرَّب 2.5 إلى 2، و 3.5 يُقَرَّب إلى 4. غالبًا ما يُفضَّل هذا النهج في التحليل الإحصائي لتقليل التحيز.

إليك كيفية استخدام decimal.Round():


using System;

public class DecimalRoundingExample
{
    public static void Main(string[] args)
    {
        decimal value1 = 2.555m;
        decimal value2 = 2.5m;
        decimal value3 = -2.5m;

        // بعيدًا عن الصفر (افتراضي)
        Console.WriteLine($"{value1} مُقَرَّب: {decimal.Round(value1, 2)}");
        Console.WriteLine($"{value2} مُقَرَّب: {decimal.Round(value2, 2)}");
        Console.WriteLine($"{value3} مُقَرَّب: {decimal.Round(value3, 2)}");

        // إلى عدد زوجي
        Console.WriteLine($"n{value1} مُقَرَّب (إلى عدد زوجي): {decimal.Round(value1, 2, MidpointRounding.ToEven)}");
        Console.WriteLine($"{value2} مُقَرَّب (إلى عدد زوجي): {decimal.Round(value2, 2, MidpointRounding.ToEven)}");
        Console.WriteLine($"{value3} مُقَرَّب (إلى عدد زوجي): {decimal.Round(value3, 2, MidpointRounding.ToEven)}");
    }
}

تقريب الأعداد العشرية باستخدام Math.Round()

توفر طريقة Math.Round() نهجًا أبسط للتقريب، ولكن مع تحكم أقل. إنها تعتمد افتراضيًا على MidpointRounding.AwayFromZero. بينما يمكنك تحديد MidpointRounding.ToEven، فمن المُستحسن عمومًا استخدام decimal.Round() لوضوحها ودقتها، خاصة في التطبيقات المالية.


using System;

public class MathRoundingExample
{
    public static void Main(string[] args)
    {
        decimal value1 = 2.555m;

        // بعيدًا عن الصفر (افتراضي)
        Console.WriteLine($"{value1} مُقَرَّب: {Math.Round(value1, 2)}");

        // إلى عدد زوجي (مُحدد صراحةً)
        Console.WriteLine($"n{value1} مُقَرَّب (إلى عدد زوجي): {Math.Round(value1, 2, MidpointRounding.ToEven)}");
    }
}

اختيار طريقة التقريب المناسبة

بالنسبة للتطبيقات التي تتطلب تقريبًا دقيقًا، خاصة الحسابات المالية، فإن decimal.Round() مع تحديد MidpointRounding الصريح هو الخيار المُفضَّل. أما بالنسبة للسيناريوهات الأقل أهمية حيث يكفي سلوك التقريب الافتراضي، فإن Math.Round() يوفر حلًا أكثر إيجازًا.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *