我需要在 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并每次都传递它,不如这样做: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top