2016-12-30 12 views
1

Мне нужно применить формат к типу decimal. Скажем, номер 12345 должен быть указан в формате ## ##0,0. Затем требуемый результат равен 12 345,0. Но как-то он не применяется правильно, и я получаю результат как 1 2,345.Формат не применяется во французской культуре

Ниже приведен код, который выполняет форматирование. Также проверьте это fiddle, где воспроизводится моя проблема.

ОБНОВЛЕНО

CultureInfo ci = new CultureInfo("fr-FR"); 
decimal integral = Convert.ToDecimal("12345"); 
Console.WriteLine(integral.ToString("## ##0,0")); 

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

+0

Вы, похоже, не используете какую-либо деталь ci, которую вы установили ... вы пытались ее использовать? – BugFinder

+0

Сначала вы должны установить текущую культуру в потоке, потому что вы не используете новую культуру в любом месте. Как C# будет знать, использовать культуру, которую вы создали. –

+0

@ DirtyDeveloper Да, это ошибка, которую я сделал при создании образца кода. Можно проверить обновление и все те же проблемы. – JDoshi

ответ

2

Вы не используете информацию, созданную культуру для форматирования числа. Кроме того, ваш спецификатор формата неверен. Вы всегда должны использовать POINT как десятичный разделитель в строке формата, который затем заменяется децимальным разделителем для конкретной культуры (запятая для fr-FR).

Следующий должен работать правильно:

integral.ToString("## ##0.0", ci) 
+0

С '.' он работает, но как я могу добиться того же с', '. Я думаю, что это возможно с ',' как 'decimal separator', но я не знаю, как :( – JDoshi

+0

Форматы, которые должны быть применены, получены из пользовательского ввода. Как правило, предполагается, что он корректно работает с', 'as' decimal separator', поэтому это должно работать так, как это хорошо работает с 'Excel'. – JDoshi

+0

@JDoshi К сожалению, спецификаторы формата не зависят от культуры. Если вы уверены в культуре конечного пользователя, вы можете выполнить простую" замените "запятой точкой. – Mr47

0

вы можете использовать эту функцию:

public static string FormatNumber(this double number) 
     { 
      return number.ToString("#,##0.00"); 
     } 

А затем вызвать вашу функцию как:

decimal integral = Convert.ToDecimal("12345"); 
Console.WriteLine(integral.FormatNumber()); 
Смежные вопросы