4

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 の場合にのみオーバーライドしたいと考えています。その場合、"Free" 文字列を含むローカライズされたリソースを簡単に返すことができます。

では、これを行うにはどうすればよいですか?

ありがとう

4

4 に答える 4

17

使用する

.ToString("$###.00;;Free")
于 2010-10-05T19:05:49.693 に答える
4

最も簡単な方法は、拡張メソッドになると思います。

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

を使いたい場合はIFormatProviderMSDN に良い例があります

于 2010-10-05T19:00:30.747 に答える
2

拡張メソッドはどうですか:

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

それで

priceFree.FreeString();
priceNotFree.FreeString();
于 2010-10-05T18:59:51.663 に答える
0

カスタム IFormatProvider を使用して毎回渡す代わりに、次のようにします。

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
于 2010-10-05T19:03:27.643 に答える