Как использовать NumberFormatInfo для удаления скобок для отрицательные значения

В настоящее время мы используем следующее для создания значений в долларах США в нашем веб-приложении:

string.Format("{0:C0}", dollarValue );

В этом примере, если DollarValue равно 145, мы увидим: $145. Если это -145, то мы увидим ($145), а не -$145. Обратите внимание, что для нас DollarValue является двойным, но может быть любым числовым типом. Я думаю.

В любом случае, я хочу, чтобы это было либо 145 долларов, либо -145 долларов.

Согласно моему исследованию, это можно сделать с помощью класса NumberFormatInfo. Я не могу понять, как его использовать, и я не могу найти ни одного действительного примера. Я видел этот вопрос здесь: С#, создающий пользовательский NumberFormatInfo для отображения «Бесплатно», когда значение валюты равно 0,00 доллара США, но пример из MSDN, связанный с этим вопросом, кажется немного отличным от того, что я действительно хочу сделать .

Я понимаю, что мне нужно будет сделать что-то из следующего:

double dollarValue = -145d;
string myMoney = dollarValue.ToString( "C0", someIFormatProvider );

где someIFormatProvider, скорее всего, имеет тип NumberFormatInfo. Итак, что я сделал, так это:

NumberFormatInfo ni = new NumberformatInfo();
ni.CurrencyNegativePattern = 1; // The value 1 should mean not to use parenthesis
string myMoney = dollarValue.ToString( "C0", ni );

...и я получаю исключение "Экземпляр доступен только для чтения". Хотя «документация» для свойства CurrencyNegativePattern говорит, что вы можете SET и GET значение, по-видимому, вы не можете. Кроме того, NumberFormatInfo является закрытым классом. Я не могу легко создать новый класс на его основе и переопределить значение.

Я не знаю, что с этим делать. Прямо сейчас мой обходной путь состоит в том, чтобы просто отменить мое отрицательное значение и получить положительный результат, который я снова выполняю string.Format(...). Да, я понимаю, что перед этим нет отрицательного знака, но, конечно, это легко решить, добавив «-» перед результатом по мере необходимости.

Может ли кто-нибудь предоставить мне рабочий пример того, как правильно использовать класс NumbefFormatInfo в этой ситуации? Спасибо.

11
задан Community 23 May 2017 в 12:15
поделиться