Как отобразить символ евро перед номером при использовании CultureInfo?

Итак, я хотел попробовать отобразить валюту в C # и нашел CultureInfo, единственное, что нет способа отобразить символ евро перед номером, а не из того, что я видел и читал.

В основном это:

float f = 100.50;
MoneyAmount.Text = f.ToString("C", new CultureInfo("en-GB"));

отобразит: £100,50

это:

float f = 100.50;
MoneyAmount.Text = f.ToString("C", new CultureInfo("en-US"));

будет отображаться: $ 100,50

но это:

float f = 100.50;
MoneyAmount.Text = f.ToString("C", new CultureInfo("fr-FR"));

отобразит: 100,50 €

Есть ли способ для fr-FR отображать валюту следующим образом: 100,50 евро?


person JazzEX    schedule 02.12.2017    source источник
comment
Вы уверены, что это правильный вопрос? Если культура Франции решает показать символ валюты после значения, почему вы должны говорить иначе?   -  person Lasse V. Karlsen    schedule 03.12.2017


Ответы (4)


Вы можете установить NumberFormat.CurrencyPositivePattern и NumberFormat.CurrencyNegativePattern экземпляра CultureInfo:

float f = 100.50f;
var culture = new CultureInfo("fr-FR");
culture.NumberFormat.CurrencyPositivePattern = 0;
culture.NumberFormat.CurrencyNegativePattern = 2;
culture.NumberFormat.CurrencyDecimalSeparator = CultureInfo.InvariantCulture.NumberFormat.CurrencyDecimalSeparator;
Console.WriteLine(f.ToString("C", culture));

Отпечатки

    €100.50
person adjan    schedule 02.12.2017

Вы можете настроить культурную информацию;

var frenchCulture = new CultureInfo("fr-FR");
frenchCulture.NumberFormat.CurrencyPositivePattern = 0;
frenchCulture.NumberFormat.CurrencyNegativePattern = 2;
frenchCulture.NumberFormat.CurrencyDecimalSeparator = ".";
double value = 100.50;
Console.WriteLine(value.ToString("C", frenchCulture)); // Output : €100.50
value = -100.50; //For negative currency
Console.WriteLine(value.ToString("C", frenchCulture)); // Output : €-100.50
person lucky    schedule 02.12.2017
comment
frenchCulture.NumberFormat.CurrencyPositivePattern = 0; frenchCulture.NumberFormat.CurrencyDecimalSeparator = "."; сделает вывод точно соответствующим тому, что было запрошено, €100.50 - person Jon Hanna; 03.12.2017

Вы можете использовать свойство CurrencyPositivePattern в классе NumberFormatInfo. в вашей культурной информации. Когда используется значение 2, оно изменит положение символа валюты перед числом.

person Jaydeep    schedule 02.12.2017

Тот, кто прокомментировал «поставьте en-FR вместо fr-FR», чтобы это выглядело так:

MoneyAmount.Text = f.ToString("C", new CultureInfo("en-FR"));

Спасибо, Адриан, это помогло. Я не думал, что en-FR существует, потому что единственное, что я нашел, было fr-FR.

person JazzEX    schedule 02.12.2017
comment
en-IE является более распространенным языковым стандартом (поскольку в этой стране этот язык чаще используется), который будет иметь тот же эффект, но если вам действительно нужен французский язык, как говорят во Франции, но с евро впереди, то Rainman's ответ ближе к этому. (Я также был бы осторожен с денежными суммами в значениях float, а не decimal). - person Jon Hanna; 02.12.2017
comment
Сначала это предложил я, но я обновил свой ответ, указав лучший подход (который не требует изменения строки локали) - person adjan; 03.12.2017
comment
Что ж, спасибо, Адриан :) Также для меня лучше просто изменить строку локали, потому что сейчас у меня есть массив строк, состоящий из en-GB, en-FR, en-US, а затем binaryReader, который считывает идентификатор what currency is being used, поэтому, если его 0, то все будет иметь £, если 1 затем , а если 2, то $, и он получит соответствующую информацию о культуре из массива. - person JazzEX; 03.12.2017