我可以使用标准货币格式来使用负号而不是括号吗?

时间:2012-07-27 21:52:31

标签: c# asp.net

我的项目中有很多地方尝试使用内置的{0:C}货币格式显示货币。如果数字为负数,则它将括在括号中的值。我希望它改为使用负号。

我的web.config已将文化设置为auto,并将其解析为en-US

理想的解决方案是某些全局web.config或其他设置会使{0:C}显示en-US文化的负号,但我对其他不那么棒的解决方案持开放态度,好。

3 个答案:

答案 0 :(得分:15)

您必须指定正确的NumberFormatInfo.CurrencyNegativePattern,这可能是1。

Decimal dec = new Decimal(-1234.4321);
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
culture.NumberFormat.CurrencyNegativePattern = 1; 
String str = String.Format(culture, "{0:C}", dec);
Console.Write(str);

演示:http://ideone.com/HxSqT

输出:

-$1,234.43

答案 1 :(得分:11)

我认为这里的答案组合可以让你更接近你想要的。

protected void Application_BeginRequest()
{
    var ci = CultureInfo.GetCultureInfo("en-US");

    if (Thread.CurrentThread.CurrentCulture.DisplayName == ci.DisplayName)
    {
        ci = CultureInfo.CreateSpecificCulture("en-US");
        ci.NumberFormat.CurrencyNegativePattern = 1;
        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
    }
}

如果您不想使用任何代码来处理这样的单一文化......我相信您需要建立自己的文化...... Check this Question

答案 2 :(得分:1)

据我了解你的问题。

您希望根据文化显示货币格式。

每次你做文化特定的事情时,.NET都会关注Thread.CurrentThread.CurrentCultureThread.CurrentThread.CurrentUICulture

您可以使用global.asax BeginRequest方法在ASP.NET中设置所需的文化。

protected void Application_BeginRequest()
{
    var ci = CultureInfo.GetCultureInfo("en-US"); // put the culture you want in here

    Thread.CurrentThread.CurrentCulture = ci;
    Thread.CurrentThread.CurrentUICulture = ci;
}