2009-12-01 2 views
42

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

+0

Не хотите ли вы преобразовать это в два типа? Используйте String.Split(). –

+1

Удалите запятые перед преобразованием. –

+0

У меня такая же проблема @ big-z. Я удалил запятые: bool totalPriceConversionResult = decimal.TryParse (txtTotalPrice.Text.Replace (",", ""), out totalPrice) и преобразовать его в: TotalPrice = totalPriceConversionResult? Convert.ToInt32 (totalPrice): 0. но это дает мне 0 вау. http://stackoverflow.com/questions/37359906 –

ответ

111

Вы можете использовать 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' 
} 
+3

Ты шутишь, .Net может это сделать ?! Ницца! – Will

+0

Ницца, спасибо. –

+0

Любите флаг! Просто осознайте его существование .. спасибо @CMS – nonintanon

2

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

+0

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

2

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

например

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

(заменить Int с двойным, если вам нужно с плавающей точкой)

6

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

0

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

Int32.Parse

Int32.TryParse

2

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

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

+2

'int.Parse (" 1,1,1 ", NumberStyles.AllowThousands);' возвращает '111', поэтому .NET действительно считает, что это допустимое число. – nunzabar

0

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

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

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

Смежные вопросы