C # créer une coutume NumberFormatInfo à l'affichage « libre » lorsqu'une valeur monétaire est de 0,00 $
-
28-09-2019 - |
Question
Je dois montrer une monnaie dans mon application ASP.NET MVC mais quand la monnaie est 0 Je l'aime pour afficher « Free » (localisé bien sûr!) Au lieu de 0,00 $.
Alors, quand j'ai quelque chose comme ça ...
Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;
priceFree.ToString("C");
priceNotFree.ToString("C");
La sortie est « 0,00 $ » "100,00 $"
Je voudrais qu'il soit "Libre" "100,00 $"
J'imagine que je peux utiliser le .ToString (format de chaîne, IFormatProvider formatProvider) méthode pour accomplir cela, mais je ne suis pas sûr de savoir comment s'y prendre. Je veux Obvious réutiliser autant de NumberFormatInfo que possible et ne remplacer quand l'entrée est 0. Dans ce cas, je peux simple retour à une ressource localisée qui contient ma chaîne « libre ».
Alors, comment puis-je faire?
Merci
La solution
Je pense que la meilleure façon d'aller serait une méthode d'extension:
public static string ToPriceString(this decimal value)
{
if (value <= 0m)
return "Free"; // Your localized resource
else
return value.ToString("C");
}
Si vous voulez aller avec le IFormatProvider
, il y a un bon exemple sur MSDN .
Autres conseils
Utilisez
.ToString("$###.00;;Free")
Que diriez-vous d'une méthode d'extension:
public static string FreeString(this decimal dec)
{
if(dec == 0M)
{
return "Free";
}
else
{
return dec.ToString("C");
}
}
Ensuite
priceFree.FreeString();
priceNotFree.FreeString();
Au lieu d'utiliser un IFormatProvider personnalisé et en passant chaque fois, que diriez-vous:
public static class MyFormatter
{
public static string ToFreeString(this decimal d)
{
return d == 0 ? "Free" : d.ToString("d");
}
}