Пользовательский символ валюты и десятичные разряды с использованием decimal.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-MY похожим на 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=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
lblPaids.Text = paid.ToString("C",usCulture.Name);
Или же
lblPaids.Text = paid.ToString("C",LocalFormat.Name);
должно работать