C # creare un NumberFormatInfo personalizzato per visualizzare “Free”, quando un valore di valuta è di $ 0.00
-
28-09-2019 - |
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
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");
}
}