String.Format (& # 8220; {0: C2} & # 8221 ;, -1234) (формат валюты) обрабатывает отрицательные числа как положительные

StackOverflow https://stackoverflow.com/questions/1001114

Вопрос

Я использую String.Format (" {0: C2} " ;, -1234) для форматирования чисел.

Всегда форматирует сумму в положительное число, а я хочу, чтобы она стала $ - 1234

Это было полезно?

Решение 3

Я думаю, что я просто буду использовать:

FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)

(в модуле Microsoft.VisualBasic.Strings)

Или более короткими словами (это то, что я собираюсь использовать):

FormatCurrency(-1234.56, 2, 0, 0)

Или я создам собственную функцию форматирования валюты, которая использует функцию VB, передавая мои пользовательские параметры.

Для получения более подробной информации ознакомьтесь с функцией FormatCurrency ( Visual Basic) в MSDN.

Другие советы

Прав ли я, говоря, что он заключен в квадратные скобки, то есть форматируется как ($ 1,234.00) ? Если это так, то я считаю, что такое поведение предназначено для США.

Однако вы можете создать свой собственный NumberFormatInfo , который не будет так себя вести. Возьмите существующий NumberFormatInfo , который «в основном прав», вызовите Clone () для создания изменяемой копии, а затем установите 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);
}

Другой простой вариант - указать строку формата вручную.

String.Format("{0:$#,##0.00}", -1234)

Или, если символ валюты должен быть параметром, вы можете сделать это

String.Format("{0:" + symbol + "#,##0.00}", -1234)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top