String.Format( "{0: C2}", -1234) (формат валюты) обрабатывает отрицательные числа как положительные
Я использую String.Format("{0:C2}", -1234)
для форматирования чисел.
Он всегда форматирует количество до положительного числа, в то время как я хочу, чтобы оно стало $ - 1234
Ответы
Ответ 1
Думаю, я просто использую:
FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)
(в модуле Microsoft.VisualBasic.Strings)
Или короче слов (это то, что им действительно нужно использовать):
FormatCurrency(-1234.56, 2, 0, 0)
Или я сделаю себе функцию customcurrency, которая использует функцию VB, передающую мои собственные параметры.
Для получения дополнительной информации см. FormatCurrency Function (Visual Basic) в msdn.
Ответ 2
Я правильно говорю, что он помещает его в скобки, т.е. форматирует его как ($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}"
в качестве строки формата.
EDIT: здесь используется вспомогательный метод, который в основном делает то же самое:
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);
}
Ответ 3
Еще одна простая опция - указать строку формата.
String.Format("{0:$#,##0.00}", -1234)
Или, если символом валюты должен быть параметр, вы можете сделать это
String.Format("{0:" + symbol + "#,##0.00}", -1234)