C# 为什么自定义十进制格式化程序显示  而不是视图中的逗号

C# 为什么自定义十进制格式化程序显示  而不是视图中的逗号,c#,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,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.F

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

我最初的扩展如下所示:

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);
}
<td>10&#160;000.00</td>
@(Model.SpouseGrossSalary == null ? "N/A" : ((decimal)Model.SpouseGrossSalary).FormatCurrency())
我发现并不是所有的服务器都配置为南非,有些服务器仍然默认为美国。因此货币符号不会总是正确显示

我不关心货币符号,如果它不显示,我可以。我将格式化程序更改为如下所示:

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);
}
<td>10&#160;000.00</td>
@(Model.SpouseGrossSalary == null ? "N/A" : ((decimal)Model.SpouseGrossSalary).FormatCurrency())
我所需要的就是,如果我的值是100000000,那么它需要显示为100000.00,如果我有10000,那么它需要显示为10000.00。目前为10000.00。当我查看HTML时,它如下所示:

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);
}
<td>10&#160;000.00</td>
@(Model.SpouseGrossSalary == null ? "N/A" : ((decimal)Model.SpouseGrossSalary).FormatCurrency())

您可以指定所需的格式:

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编码的,并且应该是这样的。它将正确显示在浏览器中。

谢谢。我将如何完成我的第二个扩展方法,不使用文化信息,并将其格式化为10000,没有小数点,就像我原来的帖子一样?请更新您的答案好吗?请查看我关于使用
NumberFormatInfo
而不是特定区域性的更新答案。