C# إنشاء رقم مخصص لـ FormFormatInfo لعرض "مجاني" عندما تكون قيمة العملة 0.00 دولار

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

سؤال

أحتاج إلى عرض عملة في تطبيق ASP.NET MVC الخاص بي ، لكن عندما تكون العملة 0 أود أن تعرض "مجانًا" (مترجمة بالطبع!) بدلاً من 0.00 دولار.

لذلك عندما يكون لدي شيء مثل هذا ...

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

priceFree.ToString("C");
priceNotFree.ToString("C");

الإخراج "0.00 دولار" "100.00 دولار"

أود أن تكون "مجانية" "100.00 دولار"

أتصور أنه يمكنني استخدام. من الواضح أنني أريد إعادة استخدام أكبر قدر ممكن من NumberFormatInfo وتجاوزه فقط عندما يكون الإدخال 0. في هذه الحالة ، يمكنني إرجاع مورد محلي بسيط يحتوي على سلسلة "مجانية".

فكيف أفعل هذا؟

شكرًا

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

المحلول

أعتقد أن أسهل طريقة للذهاب ستكون طريقة تمديد:

public static string ToPriceString(this decimal value) 
{
    if (value <= 0m) 
        return "Free"; // Your localized resource
    else 
        return value.ToString("C");
}

إذا كنت تريد الذهاب مع IFormatProvider, هناك مثال جيد على MSDN.

نصائح أخرى

يستخدم

.ToString("$###.00;;Free")

ماذا عن طريقة التمديد:

public static string FreeString(this decimal dec)
{
   if(dec == 0M)
   {
      return "Free";
   }
   else
   {
      return dec.ToString("C");
   }
}

ثم

priceFree.FreeString();
priceNotFree.FreeString();

بدلاً من استخدام iformatprovider مخصص وتمريره في كل مرة ، ماذا عن هذا:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top