Преобразование строки в число и разделитель групп - PullRequest
5 голосов
/ 05 марта 2010

Когда я пытаюсь преобразовать строку в числовое значение с помощью Parse, TryParse или Convert.ChangeType, я не могу управлять разделителем тысяч, как это определено в системе:

если я введу:

var d = double.Parse("1,234", CultureInfo.CurrentUICulture);

не возвращает 1234.

Если я хочу использовать разделитель групп, я должен набрать:

var d = double.Parse("1,234", NumberStyles.Number, CultureInfo.CurrentUICulture);

На этот раз ожидаемый результат.

Но я не хочу принудительно использовать разделитель тысяч, я хочу использовать его только в том случае, если система указывает его в настройках глобализации. Есть ли способ узнать, используется ли разделитель (я знаю, что могу прочитать разделитель групп в CultureInfo.CurrentUICulture.NumberFormat.NumberGroupSeparator)

Приветствие Лоик

Ответы [ 3 ]

2 голосов
/ 05 марта 2010

Наличие Number (которое включает AllowThousands) не требует запятую - оно просто позволяет это. Таким образом, вы можете использовать Number с запятой или без нее. Или используйте Any или AllowThousands.

Обратите внимание, что «запятая» может заменяться на «разделитель тысяч», т. Е. В некоторых странах Европы она может варьироваться (период и т. Д.) Если вы имеете в виду «запятая - это тысячи», используйте фиксированную культуру (например, InvariantCulture).

0 голосов
/ 05 марта 2010

Вы должны проанализировать ввод пользователя, используя CurrentCulture, а не CurrentUICulture.

Свойство CurrentUICulture относится к языку, на котором отображается пользовательский интерфейс, а CurrentCulture к текущей локали, указанной в Windows. Таким образом, пользователь, работающий с приложением, предоставляющим пользовательский интерфейс, переведенный на английский язык (CurrentUICulture), может по-прежнему просматривать / вводить, например, даты и числа, отформатированные в качестве локали, установленной в Windows (CurrentCulture).

0 голосов
/ 05 марта 2010

Вы всегда можете использовать вторую строку, которую используете

var d = double.Parse("1,234", NumberStyles.Number, CultureInfo.CurrentUICulture);

, поскольку он будет правильно преобразовывать 1234, а также 1234 и должен охватывать 1,234 в системах, использующих '.' в качестве разделителя групп

...