Подтвердить что ты не робот

Convert.ToInt32() строка с запятой

У меня есть строка, которая иногда имеет запятую, разделяющую число, подобное 1,500, и мне нужно преобразовать это в Int, в настоящее время он бросает исключение, может кто-то сказать мне, как исправить это, чтобы иногда я мог вводить числа с запятыми и другими моментами с запятыми, и он все равно будет преобразован.

4b9b3361

Ответ 1

Вы можете использовать int.Parse и добавить NumberStyles.AllowThousands:

int num = int.Parse(toParse, NumberStyles.AllowThousands);

Или int.TryParse, давая вам знать, удалось ли выполнить операцию:

int num;
if (int.TryParse(toParse, NumberStyles.AllowThousands,
                 CultureInfo.InvariantCulture, out num))
{
    // parse successful, use 'num'
}

Ответ 2

Вы можете использовать Decimal.Parse(), а затем применить результат к int. Это также работает с текущей культурой, или вы можете указать CultureInfo для использования. Нет необходимости вручную обрабатывать запятые, десятичные точки и т.д., Которые все встроены в .NET.

Ответ 3

Вы можете сделать replace(';', ''), прежде чем преобразовать его в int.

Ответ 4

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

например

string nastyNumber = "1,234";
int result = int.Parse(nastyNumber.Replace(",", ""));

(замените int на double, если вам нужна плавающая точка)

Ответ 5

Что с грубой силой предлагает удалить запятые? Что, если строка что-то вроде "1,1,1"? Действительно ли это число? Удаление запятых сделает его допустимым числом и сделает преобразование семантически неправильным.

Существует причина, по которой существуют NumberStyles, и метод Int.Parse() может анализировать с учетом стиля или без него.

Ответ 6

Вы можете заменить запятые на String.Empty до вызова Convert.ToInt32(), или вы можете использовать Int32.Parse() или Int32.TryParse() с NumberStyles.AllowThousands как один из параметров.

Int32.Parse

Int32.TryParse

Ответ 7

Вы можете использовать код

int num = Strings.Replace(str, ",", string.Empty);

Это заменяет все вхождения "," на "" (пустая строка). Таким образом, 1,000,000 оборотов 1000000