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

DMa*_*yer 13 c# asp.net

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

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

理想的解决方案是一些全局web.config或其他设置,使{0:C}显示en-US文化的负面信号,但我也接受其他,不那么棒的解决方案.

Tim*_*ter 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);
Run Code Online (Sandbox Code Playgroud)

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

输出:

-$1,234.43
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 14

我认为这里的答案组合将使您更接近您想要的.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你不想有任何代码来处理像这样的单一文化......我相信你需要建立自己的文化...... 检查这个问题