我是否正确地把它放在方括号内,即将其格式化为($ 1,234.00)?如果是这样,我相信这是美国的预期行为。
但是,您可以创建自己的NumberFormatInfo,它不会以这种方式表现。拿一个“主要是”的NumberFormatInfo,调用Clone()来创建一个可变的副本,然后适当地设置CurrencyNegativePattern(我想你想要的值为2)。
例如:
using System;
using System.Globalization;
class Test
{
static void Main()
{
var usCulture = CultureInfo.CreateSpecificCulture("en-US");
var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
clonedNumbers.CurrencyNegativePattern = 2;
string formatted = string.Format(clonedNumbers, "{0:C2}", -1234);
Console.WriteLine(formatted);
}
}
这打印$ 1,234.00。如果您确实需要$ -1234,则需要将CurrencyGroupSizes属性设置为新的int [] {0},并使用“{0:C0}”而不是“{0:C2}”作为格式字符串。
编辑:这是一个帮助方法,你可以使用它基本上做同样的事情:
private static readonly NumberFormatInfo CurrencyFormat = CreateCurrencyFormat();
private static NumberFormatInfo CreateCurrencyFormat()
{
var usCulture = CultureInfo.CreateSpecificCulture("en-US");
var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
clonedNumbers.CurrencyNegativePattern = 2;
return clonedNumbers;
}
public static string FormatCurrency(decimal value)
{
return value.ToString("C2", CurrencyFormat);
}