Почему C # десятичный ToString запрос культуры и валюты? - PullRequest
0 голосов
/ 13 декабря 2018

Я не могу найти вариант, учитывая число и валюту, печатая их в строку с учетом культуры.Самая близкая вещь, которую я нашел, это decimal.ToString("C", GIVEN_CULTURE), но это не будет запрашивать валюту и предполагает, что я говорю о валюте, о которой знает культура.Что если я буду работать с долларом в Европе?

Например, Javascript будет запрашивать оба параметра при построении строки:

GIVEN_STRING.toLocaleString(culture, { style: 'currency', currency: currency })

И это актуально, так как программное обеспечение, над которым я работаю, обрабатывает как USD, так и MXN (мексиканское песо).Наша веб-панель отображает различные символы, относящиеся к культуре (примеры в Chrome, я думаю, это разные браузеры):

ru:

  • USD имеет символ "$"
  • MXN имеет символ "MX $"

es-MX:

  • USD имеет символ "US $"
  • MXN имеет символ "$"

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я не уверен, что понимаю ваш вопрос, но, например, если вы хотите, чтобы значение double было выражено в качестве валюты для разных стран, вам нужно указать для него CultureInfo.

double foo = 3;
string fooGerman = foo.ToString("C", CultureInfo.GetCultureInfo("de-DE"));
string fooEnglish = foo.ToString("C", CultureInfo.GetCultureInfo("en-GB"));
Console.WriteLine(fooGerman);
Console.WriteLine(fooEnglish);

OUTPUT
3,00 €
£3.00

Если этого недостаточно, вы можете установить символ для данного CultureInfo в CultureInfo.NumberFormat.CurrencySymbol, и вы можете создать свой собственный IFormatProvider для ToString() или создать свой собственный CultureInfo.

0 голосов
/ 13 декабря 2018

Если все, что вас беспокоит, это символ валюты, вы можете легко установить для него любое значение:

var format = (NumberFormatInfo)CultureInfo.CreateSpecificCulture("es-MX").NumberFormat.Clone();
format.CurrencySymbol = "US$";
decimal amount = 12.34m;
amount.ToString("C", format);
// OUTPUT:
// US$12.34

Но обычно это еще не все в форматировании денежных значений.Как видите, значение будет отформатировано очень иначе в Германии, например, из-за особых культурных различий (таких как десятичная точка, положение символа валюты, интервал и т. Д.):

amount.ToString("C", CultureInfo.CreateSpecificCulture("de-DE"));
// OUTPUT:
// 12,34 €
...