C # créer une coutume NumberFormatInfo à l'affichage « libre » lorsqu'une valeur monétaire est de 0,00 $

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

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

Était-ce utile?

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");
        }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top