تحتاج إلى تنسيق عملة مخصص لاستخدامه مع String.Format

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

  •  23-08-2019
  •  | 
  •  

سؤال

أحاول استخدام String.Format ("{0: c}"، somvalue) في C # ولكن أواجه صعوبة في معرفة كيفية تكوين الإخراج لتلبية احتياجاتي. إليك احتياجاتي:

  1. 0 مخرجات إلى فارغة
  2. 1.00 مخرجات إلى 1.00 دولار
  3. 10.00 مخرجات إلى 10.00 دولار
  4. 100.00 مخرجات إلى 100.00 دولار
  5. 1000.00 مخرجات إلى 1،000.00 دولار

لقد حاولت string.format ("{0: c}"، somvalue) ولكن بالنسبة للقيم الصفرية، فإنه يخرج 0.00 دولار وهذا ليس ما أريد. لقد جربت أيضا String.format ("{0: 0،0.00 دولار؛ $ (0،0،0.00)؛ #}"، somvalue)، ولكن لمدة 1.0 مخرجات 01.00 دولار. String.format ("{0: $ 0.00؛ $ (0.00)؛ #}"، بعض الحالات) يعمل في معظم الحالات، ولكن عندما يكون somevalue 1000.00 الإخراج هو 1000.00 دولار.

هل هناك بعض التنسيق الذي سوف يناسب جميع الحالات 5 أعلاه؟ جميع الوثائق التي قرأتها فقط تفاصيل الأساسيات ولا تلمس هذا النوع من السيناريو.

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

المحلول

كما ترى

string.Format("{0:$#,##0.00;($#,##0.00);''}", value)

سوف تحصل على "" بالنسبة للقيمة الصفرية، يجب تنسيق القيم الأخرى بشكل صحيح أيضا.

نصائح أخرى

جرب شيئا مثل هذا:

String currency = (number == 0) ? String.Empty : number.ToString("c");

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

public static string ToCurrencyString (this decimal value)
{
  if (value == 0)
    return String.Empty;
  return value.ToString ("C");
}

هنا مرجع رائع قد تجده مفيدا، يلخص هذه البيانات: http://blog.stevex.net/string-formatting-in-csharp/

تنسيقات العملة "C" رائعة حتى تحتاج إلى فارغة ل 0. فيما يلي طريقتان، واحد مذكور أعلاه، على غرار تلك التي أستخدمها التي تعطيك الفراغ ل 0:

// one way
string.Format("{0:$#,##0.00;($#,##0.00);''}", somevalue)

// another way
somevalue.ToString("$#,##0.00;($#,##0.00);''")

تشعر التقنية الثانية بأنها أكثر بطلاقة "، إذا كنت تحب هذا النمط الكود (كما أقوم بذلك).

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