当货币值为0.00美元时,C#创建自定义NumberFormatInfo以显示“Free”

我需要在我的ASP.NET MVC应用程序中显示货币,但当货币为0时,我希望它显示“Free”(当然是本地化的!)而不是0.00美元。

所以,当我有这样的事情……

Decimal priceFree = 0.00; Decimal priceNotFree = 100.00; priceFree.ToString("C"); priceNotFree.ToString("C"); 

输出为“$ 0.00”“$ 100.00”

我希望它是“免费”“100.00美元”

我想我可以使用.ToString(字符串格式,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就有一个很好的例子 。

使用

 .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"); } }