هل يحتوي .Net على أي ثوابت مضمنة للأرقام الشائعة مثل المليون والمليار وما إلى ذلك؟

StackOverflow https://stackoverflow.com/questions/1644468

  •  10-07-2019
  •  | 
  •  

سؤال

هل يحتوي .Net على أي ثوابت مضمنة للأرقام الشائعة مثل المليون والمليار وما إلى ذلك؟

يحرر:كما تم اقتراح ذلك، كان هذا لأسباب تتعلق بقابلية القراءة، بدلاً من كتابة 1000000 أو 1000000000.أعلم أنه يمكنني إنشاء خاصيتي، أردت فقط التحقق من أنها لم تكن موجودة بالفعل قبل أن أفعل ذلك.

هل كانت مفيدة؟

المحلول

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

#define BANKOFAMERICA_TARP_AMOUNT 1000000000.0; // One billion dollars

نصائح أخرى

وبالتأكيد، أنها تتم تسمية 1e6، 1E9، الخ ...؛ -)

ولا. بشكل عام، من الأفضل استخدام قيم ثابتة للالحرفية التي لها دلالات خارج من قيمتها. على سبيل المثال، 3.14159 هو حرفي، لكنه أيضا قيمة الرياضية المهمة على نطاق واسع، π (ولو تقريبي).

وعلى سبيل المقارنة، فإن عددا مثل 1،000،000 هو مجرد الحرفي وليس لديها بالضرورة أي عموم الآخرين من قيمته، لذلك ليس هناك الكثير من قيمتها في جعله المدمج في ثابت. في تطبيق أو سياق معين، ومع ذلك، فإنه قد يكون من المهم - ربما 1،000،000 هو الحد الأقصى لعدد ShippingContainers ناقلة الخاصة بك يمكن أن تعقد أو شيئا من هذا القبيل. هذا هو المكان الذي كنت تستخدم ثابت.

وماذا تعتقد مليون ومليار هي أرقام المشتركة؟

لا،

هناك عدد قليل من المتاحة الثابتة، مثل

  • double.Epsilon
  • الرياضيات.PI

لكن ليس للمليون والمليار.

يمكنك إنشاء الثوابت الخاصة بك

public const int OneMillion = 1000000;

أفترض أنك تتطلع إلى تحويل رقم مثل int value = 1000000 في سلسلة طبيعية مثل string value = "1 million".

هذا غير موجود في .NET بشكل افتراضي، ولكن يمكن ترميزه بسهولة أو أفترض أنه يمكنك العثور على مثل هذا الرمز على Google.

على سبيل المثال، يمكنك إنشاء طريقة تمديد على int التي تحول الرقم إلى سلسلة لغة طبيعية بشرية: (هذا رمز رخيص من الرأس)

public static string ToNaturalString(this int value)
{
    if (value == 1000000)
        return "1 million";
    else
        return value.ToString();
}

وحتى لو كان هناك مثل هذا ثابت، وكلمة "مليار" تعني أشياء مختلفة سواء كنت الأمريكي أو الأوروبي.

في أمريكا الشمالية، مليار يساوي 1،000،000،000 = 10 ^ 9؛ في أوروبا، ومليار تساوي 1،000،000،000،000 = 10 ^ 12. (A مليار = 10 ^ 9).

وانا ذاهب مع أي.

ويتم بناؤها هناك في الثوابت لأكبر وأصغر عدد من شأنها أن تناسب في عدد صحيح أو طويل، على سبيل المثال، ولكن لا ثوابت التعسفي بين تلك النقاط.

وبلدي المفضل لاستخدام هو:

public const float EleventyBillion = 110000000000;

وأنا لا أعتقد أننا يمكن أن يكون أحد على أساس أن هناك فرقا بين الولايات المتحدة مليار (مائة ألف مليون) وبريطانيا (وغيرها؟) مليار (مليون مليون)

الاختلافات في حجم القصير والطويل على نطاق وعددهم

وإلى حد ما اللسان في خده، ولكن لا يوجد شيء يمنعك وضع طرق الإرشاد على int:

public static int million(this int i)
{
    return i * 1000000;
}

ومن أجل جعل

 int approximatePopulationOfUnitedStates = 300.million();

ورمز صالح ...

ويمكن أن تفعل شيئا أنيق ديك مثل فئة مكتبة

public class One
{
  public const int Thousand = 1000;
  public const int Million = Thousand * Thousand;
  public const int Billion = Million * Million;
  ...
}

وبعد ذلك عندما تذهب لاستخدامه يبدو قليلا أكثر إتقانا

int myNumber = 72 * One.Million;

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

// Add one to account for whatever
int countPlus1 = count + 1;

وإذا كنت يتم الرجوع عليه كومة من مرة بعد ذلك، فإنه يجعل من مجرد التعليمات البرمجية التي قليلا أكثر إتقانا IMO. أيضا يجعل التعليق أسهل، كما أنه من الأسهل لوضع تعليق قصير في بداية أن نفهم لماذا تقوم بإضافتها إلى المتغير في كل وقت من نرى كود count + 1 عشوائي.

نعم

int million = 1000000;
int billion = 1000000000;

وتماما مثل 5، a، و-1، وهذه هي الثوابت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top