Пользовательский символ валюты и десятичные разряды с использованием decimal.ToString ("C") и CultureInfo - PullRequest
8 голосов
/ 23 февраля 2010

У меня проблема с decimal.ToString("C") переопределением. По сути, я хочу сделать следующее:

CultureInfo usCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = usCulture;

NumberFormatInfo LocalFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
LocalFormat.CurrencySymbol = "RM";

Я хочу сделать приведенный выше код функцией (переопределить ToString ("C")), когда следующий код будет выполнен:

decimal paid = Convert.ToDecimal(dr["TotalPaids"]);
lblPaids.Text = paid.ToString("C");

Результат будет 4 900,00 RM вместо 4 900,00

Как создать переопределение для decimal.ToString("C"), которое решило бы мою проблему

Заранее спасибо.

Ответы [ 5 ]

16 голосов
/ 23 февраля 2010

Чтобы получить такой формат, как RM 11 123 456,00, вам также необходимо установить следующие свойства

CurrentCulture modified = new CultureInfo(Thread.CurrentThread.CurrentCulture.Name);
Thread.CurrentThread.CurrentCulture = modified;
var numberFormat = modified.NumberFormat;
numberFormat.CurrencySymbol = "RM";
numberFormat.CurrencyDecimalDigits = 2;
numberFormat.CurrencyDecimalSeparator = ".";
numberFormat.CurrencyGroupSeparator = ",";

Если вы сделаете это при запуске приложения, тогда формат ms-MY должен выглядеть как en-US, но с символом валюты RM каждый раз, когда вы вызываете метод ToString("C").

6 голосов
/ 23 февраля 2010

Если я правильно понимаю ваш вопрос, вам нужно заменить $ на RM.Если это так, вам нужно передать пользовательский формат ...

lblPaids.Text = paid.ToString("C", LocalFormat);
2 голосов
/ 24 марта 2016

Вы можете использовать метод Double.ToString (String, IFormatProvider) https://msdn.microsoft.com/en-us/library/d8ztz0sa(v=vs.110).aspx

double amount = 1234.95;

amount.ToString("C") // whatever the executing computer thinks is the right fomat

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ie"))    //  €1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("es-es"))    //  1.234,95 € 
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-GB"))    //  £1,234.95 

amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-au"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us"))    //  $1,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca"))    //  $1,234.95
2 голосов
/ 23 февраля 2010

использовать эту строку формата:

#,##0.00 $;#,##0.00'-  $';0 $
decimal paid = Convert.ToDecimal(dr["TotalPaids"]);
lblPaids.Text = paid.ToString("#,##0.00 $;#,##0.00'-  $';0 $");
0 голосов
/ 19 января 2015
lblPaids.Text = paid.ToString("C",usCulture.Name);

или

lblPaids.Text = paid.ToString("C",LocalFormat.Name);

должен работать

...