Пользовательский символ валюты и количество десятичных знаков после запятой.ToString ("C") и CultureInfo

у меня проблема с 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");

результаты будут RM4, 900.00 вместо $ 4,900.00

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

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

5 ответов


чтобы получить формат, подобный 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-мой формат, как en-US, но с символом валюты RM каждый раз, когда вы вызываете ToString("C") метод.


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

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

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

#,##0.00 $;#,##0.00'-  $';0 $
decimal paid = Convert.ToDecimal(dr["TotalPaids"]);
lblPaids.Text = paid.ToString("#,##0.00 $;#,##0.00'-  $';0 $");

вы можете использовать Double.Метод ToString (String, IFormatProvider)https://msdn.microsoft.com/en-us/library/d8ztz0sa (v=против 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"))    //  ,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-us"))    //  ,234.95
amount.ToString("C", System.Globalization.CultureInfo.GetCultureInfo("en-ca"))    //  ,234.95

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

или

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

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