Почему запятые ведут себя по-разному в int.Parse () и decimal.Parse () с InvariantCulture? - PullRequest
11 голосов
/ 29 ноября 2011

Почему:

decimal.Parse("1,2,3,45", CultureInfo.InvariantCulture)

возвращает десятичное число 12345, но:

int.Parse("1,2,3,45", CultureInfo.InvariantCulture)

выдает исключение? Я ожидаю, что запятые будут одинаковыми для той же культуры. Если decimal.Parse возвращает 12345, почему int.Parse также не возвращает 12345?

1 Ответ

16 голосов
/ 29 ноября 2011

См. NumberStyles

Значение по умолчанию NumberStyles для int равно Integer:

Integer Указывает, что используются стили AllowLeadingWhite, AllowTrailingWhite и AllowLeadingSign. Это составной числовой стиль.

Сравните с Number (используется для decimal):

Number Указывает, что используются стили AllowLeadingWhite, AllowTrailingWhite, AllowLeadingSign, AllowTrailingSign, AllowDecimalPoint и AllowThousands. Это составной числовой стиль.

Если вы хотите больше, используйте перегрузку, которая принимает NumberStyles, и поставьте (например) NumberStyles.Number или NumberStyles.Any:

int i = int.Parse("1,2,3,45", NumberStyles.Number, CultureInfo.InvariantCulture);
...