У меня есть строка, которая иногда имеет запятую, разделяющую число, подобное 1,500
, и мне нужно преобразовать это в Int, в настоящее время он бросает исключение, может кто-то сказать мне, как исправить это, чтобы иногда я мог вводить числа с запятыми и другими моментами с запятыми, и он все равно будет преобразован.
Convert.ToInt32() строка с запятой
Ответ 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
как один из параметров.
Ответ 7
Вы можете использовать код
int num = Strings.Replace(str, ",", string.Empty);
Это заменяет все вхождения "," на "" (пустая строка). Таким образом, 1,000,000 оборотов 1000000