C# 创建自定义 NumberFormatInfo 以在货币值为 $0.00 时显示“Free”
-
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 时才覆盖它。在这种情况下,我可以简单地返回包含我的“Free”字符串的本地化资源。
那么我该怎么做呢?
谢谢
解决方案
我认为最简单的方法是扩展方法:
public static string ToPriceString(this decimal value)
{
if (value <= 0m)
return "Free"; // Your localized resource
else
return value.ToString("C");
}
如果你想和 IFormatProvider
, MSDN 上有一个很好的例子.
其他提示
使用 通用标签
扩展方法如何: 通用标签
然后 通用标签
与其使用自定义IFormatProvider并每次都传递它,不如这样做: 通用标签
不隶属于 StackOverflow