C#通貨価値が0.00の場合に「無料」を表示するカスタムNumberformatinfoを作成する

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

質問

ASP.NET MVCアプリケーションに通貨を表示する必要がありますが、通貨が0の場合、0.00ドルではなく「無料」(もちろんローカライズされた」を表示したいと思います。

だから私がこのようなものを持っているとき...

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

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

出力は「$ 0.00」「$ 100.00」です

「無料」「$ 100.00」になりたい

これを達成するには、.toString(String Format、IformatProvider formatProvider)メソッドを使用できると思いますが、どうすればよいかわかりません。明らかに、私はできるだけ多くのNumberformatinfoを再利用したいと思います。入力が0の場合にのみオーバーライドしたいのですが、その場合、「無料」文字列を含むローカライズされたリソースを単純に返すことができます。

では、どうすればこれを行うことができますか?

ありがとう

役に立ちましたか?

解決

最も簡単な方法は、拡張方法だと思います。

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

あなたが一緒に行きたいなら IFormatProvider, MSDNには良い例があります.

他のヒント

使用する

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

拡張方法はどうですか:

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

それで

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

カスタムiformatproviderを使用して毎回渡す代わりに、これはどうですか:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top