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 时覆盖它。在这种情况下,我可以简单地返回一个包含我的“免费”字符串的本地化资源。

那么我该怎么做呢?

谢谢

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 回答