我的项目中有很多地方尝试使用内置的{0:C}
货币格式显示货币。如果数字为负数,则它将括在括号中的值。我希望它改为使用负号。
我的web.config已将文化设置为auto
,并将其解析为en-US
。
理想的解决方案是某些全局web.config或其他设置会使{0:C}
显示en-US
文化的负号,但我对其他不那么棒的解决方案持开放态度,好。
答案 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);
输出:
-$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.CurrentCulture
和Thread.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;
}