Форматирование валюты с помощью динамического символа валюты

В C# код Console.WriteLine("{0:c}", 998); дает вывод $998 в настройках по умолчанию "US-Language". Но если я хочу динамически изменить свой символ валюты на фунт, фунт стерлингов, рупию или любой символ валюты в зависимости от предпочтений пользователя, есть ли способ сделать это. Скажем, я вызываю метод:

public void PrintInRightCurrencyFormat(decimal value, ICustomFormatter format)
{
     Console.WriteLine( ... ... ... );
}

И этот метод напечатает значение в требуемом формате.

Еще одна вещь заключается в том, что есть ли способ вставить пользовательский символ валюты. Я хочу сказать, что если валюта поставляется с новым символом (как Индия сделала со своим символом рупии), как включить это немедленно в коде.

Спасибо всем заранее.


person Arnab Das    schedule 30.04.2011    source источник
comment
Вы можете сделать CultureInfo, но вам нужно позаботиться о конвертации валюты; как 50 долларов != 50 рупий   -  person Waqas Raja    schedule 30.04.2011


Ответы (1)


Вы можете использовать культуру:

Console.WriteLine(string.Format(new CultureInfo("en-GB"), "{0:c}", value));

или просто установите текущую культуру потока в соответствии с некоторыми предпочтениями пользователя, а затем напечатайте значение:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Console.WriteLine("{0:c}", value);
person Darin Dimitrov    schedule 30.04.2011
comment
+1 Вы не только could используете культуру, вы на самом деле should! Я бы предложил изменить культуру на более общем уровне, возможно, на уровне web.config или Thread (msdn.microsoft.com/en-us/library/). Также обратите внимание, что валюта должна храниться как decimal, а не double из-за различий в округлении. - person Bazzz; 30.04.2011
comment
Спасибо за ваш ответ. Можете ли вы дать ссылку, которая может дать предопределенный список культур. - person Arnab Das; 30.04.2011
comment
@Арнаб Дас, вот один: msdn.microsoft.com/en-us/library/ - person Darin Dimitrov; 30.04.2011