0

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

我最初的扩展是这样的:

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())
4

1 回答 1

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

于 2012-09-26T08:57:56.037 回答