为什么在视图中显示自定义小数格式器而不是逗号

时间:2012-09-26 08:38:23

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

我正在尝试编写一个十进制格式化程序扩展,我可以在我的视图中使用它。由于某些原因或其他原因,我没有得到所需的结果。

我的初始扩展名如下:

public static string FormatCurrency(this decimal instance)
{
     return string.Format("{0:c}", instance);
}

我发现并非所有服务器都配置为南非,有些仍默认为美国。因此货币符号不会始终正确显示。

我不关心货币符号,如果没有显示,我没关系。我将格式化程序更改为:

public static string FormatCurrency(this decimal instance)
{
     return string.Format("{0:0.00}", instance);
}

我需要的只是如果我的值为100000000,那么它需要显示为100,000,000.00,如果我有10000,那么它需要显示为10,000.00。目前它的价格为10 000.00。当我查看HTML时,它看起来像这样:

<td>10&#160;000.00</td>

在我看来,我这样使用它:

@(Model.SpouseGrossSalary == null ? "N/A" : ((decimal)Model.SpouseGrossSalary).FormatCurrency())

1 个答案:

答案 0 :(得分:0)

您可以指定所需的格式:

public static class DecimalExtensions
{
    public static string FormatCurrency(this decimal instance)
    {
        var format = new NumberFormatInfo
        {
            NumberGroupSeparator = ",",
            NumberDecimalDigits = 2,
            NumberDecimalSeparator = "."
        };
        return string.Format(format, "{0:N}", instance);
    }
}

或使用货币:

public static class DecimalExtensions
{
    public static string FormatCurrency(this decimal instance)
    {
        var format = new NumberFormatInfo
        {
            CurrencyGroupSeparator = ",",
            CurrencyDecimalDigits = 2,
            CurrencyDecimalSeparator = ".",
            CurrencySymbol = "R"
        };
        return string.Format(format, "{0:C}", instance);
    }
}

&#160;符号而言,这是因为该值是HTML编码的,它应该是如何编码的。它将在浏览器中正确显示。