在我的项目中有很多地方我尝试使用内置{0:C}
货币格式显示货币。如果该数字为负数,则将其包围在括号中的值。我希望它改用负号。
我的 web.config 的文化设置为auto
,它解析为en-US
.
理想的解决方案是一些全局 web.config 或其他设置,这将使{0:C}
显示成为en-US
文化的负面标志,但我也愿意接受其他不太棒的解决方案。
您必须指定正确的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
我认为这里的答案组合会让你更接近你想要的。
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;
}
}
如果你不想有任何代码来处理这样的单一文化......我相信你需要建立自己的文化......检查这个问题
据我了解你的问题。
您想根据文化显示货币格式。
每次您做特定于文化的事情时,.NET 都会查看Thread.CurrentThread.CurrentCulture
和Thread.CurrentThread.CurrentUICulture
.
您可以在 ASP.NET 中的 global.asaxBeginRequest
方法中设置所需的区域性。
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;
}