C # creare un NumberFormatInfo personalizzato per visualizzare “Free”, quando un valore di valuta è di $ 0.00

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

Domanda

Ho bisogno di visualizzare una valuta nella mia applicazione ASP.NET MVC, ma quando la moneta è 0 Vorrei che per visualizzare "Free" (localizzato ovviamente!) Invece di $ 0,00.

Così, quando ho qualcosa di simile ...

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

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

L'uscita è "$ 0.00" "$ 100.00"

vorrei che fosse "Gratuito" "$ 100.00"

immagino posso usare il .ToString (formato stringa, IFormatProvider formatProvider) metodo per ottenere questo risultato, ma io non sono sicuro di come andare a questo proposito. Ovvio Voglio riutilizzare il maggior numero di NumberFormatInfo possibile e solo ignorare quando l'ingresso è 0. In questo caso posso semplice ritorno a una risorsa localizzata che contiene la mia stringa "Free".

Allora, come faccio a fare questo?

Grazie

È stato utile?

Soluzione

Penso che il modo più semplice per andare sarebbe un metodo di estensione:

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

Se si vuole andare con il IFormatProvider, c'è un buon esempio su MSDN .

Altri suggerimenti

Usa

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

Come su un metodo di estensione:

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

Poi

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

Invece di usare un IFormatProvider personalizzato e passando ogni volta, come su questo:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top