Прав ли я, говоря, что он заключен в квадратные скобки, то есть форматируется как ($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
значение new 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);
}