Пользовательский символ валюты и количество десятичных знаков после запятой.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);
должны работать