C#通貨価値が0.00の場合に「無料」を表示するカスタムNumberformatinfoを作成する
-
28-09-2019 - |
質問
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");
}
}
所属していません StackOverflow