Frage

Ich brauche in meiner ASP.NET MVC-Anwendung eine Währung angezeigt werden, aber wenn die Währung 0 ist, würde ich es mag „Free“ anzuzeigen (lokalisierte natürlich!) Anstelle von 0,00 $.

Also, wenn ich so etwas wie dies ...

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

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

Der Ausgang ist "$ 0.00" "$ 100.00"

Ich würde es gerne sein "Kostenlos" "$ 100.00"

Ich stelle mir kann ich die .ToString verwenden (String-Format, IFormatProvider format) Methode, dies zu erreichen, aber ich bin nicht sicher, wie es geht. Offensichtliche Ich möchte so viel von dem Number wie möglich wieder zu verwenden und ihnen nur außer Kraft gesetzt, wenn der Eingang 0. In diesem Fall kann ich einfache Rückkehr eine lokalisierte Ressource, die meinen „Free“ Zeichenfolge enthält.

So wie ich das tun?

Danke

War es hilfreich?

Lösung

Ich denke, der einfachste Weg wäre eine Erweiterung Methode zu gehen:

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

Wenn Sie mit dem IFormatProvider gehen wollen, gibt es eine gutes Beispiel auf MSDN .

Andere Tipps

Mit

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

Wie wäre es eine Erweiterungsmethode:

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

Dann

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

Statt einen benutzerdefinierten IFormatProvider verwenden und es jedes Mal vorbei, wie etwa diese:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top