int.TryParse () возвращает false для "#.##"

У меня есть функция, которая получает строковые параметры и преобразует их в целые числа.
Для безопасного преобразования int.Используется TryParse ().

public IEnumerable<object> ReportView(string param1, string param2)
{
  int storeId = int.TryParse(param1, out storeId) ? storeId : 0;
  int titleId = int.TryParse(param2, out titleId) ? titleId : 0;
  IEnumerable<object> detailView = new Report().GetData(storeId, titleId);
  return detailView;
}

вызов функции ReportView("2","4")--> int.Tryparse успешно анализирует числа
Вызов функции ReportView("2.00","4.00") --> int.TryParse не удается проанализировать числа

почему? Есть идеи?

@Update
Извините, ребята, моя концепция была неправильной. Я новичок в c#, я мысль Инт.TryParse () вернет интегральную часть и проигнорирует десятичные дроби. Но это не изменит, даже не обратит.ToInt32("строка")
Благодарить всех.

9 ответов


public IEnumerable<object> ReportView(string param1, string param2)
{
  decimal tmp;
  int storeId = decimal.TryParse(param1, out tmp) ? (int)tmp : 0;
  int titleId = decimal.TryParse(param2, out tmp) ? (int)tmp : 0;
  IEnumerable<object> detailView = new Report().GetData(storeId, titleId);
  return detailView;
}

вышеуказанное будет работать с целочисленными или десятичными строками. Имейте в виду, что строки формы "2.123" приведут к возвращению целочисленного значения 2.


int.TryParse не будет пытаться разобрать строку и преобразовать ее в целое число на всякий случай. Вам нужно использовать decimal.TryParse для десятичной числовой строки.


2.00 и 4.00 не целые. Если вы хотите проанализировать десятичные дроби, используйте decimal.TryParse () или double.TryParse (), а затем усечь их или проверить на нулевое значение мантиссы.


2.00 и 4.00 не имеют целочисленных типов данных-вот почему. Если вы хотите, чтобы это было правдой, попробуйте дважды.TryParse () или decimal.TryParse ()


ну 2.00-это десятичное число, а не int в глазах компьютеров.


для компьютера "2.00" - это float/decimal, а не целое число. Вместо десятичной.TryParse () вы можете предварительно обработать строку, удалив конечные нули, а затем сделать int.Метод tryparse(). Поэтому, если у вас есть" 2.00", вы продолжаете проверять (и отбрасывать) последний символ строки, пока не достигнете"." (десятичное число.) Если это "0" или ".- можешь бросить. В конце концов, вы получите только "2".


Он не смог разобрать, потому что десятичные числа не являются целыми числами.


потому что "2.00" является десятичным, а не целым числом.


Int32 (int) может содержать только интегральные значения; поэтому функции Int32 Parse/TryParse не могут анализировать строки с десятичными знаками. Если строковые значения могут содержать десятичные дроби, но предназначены для представления целых чисел, используйте Decimal.Попробуйте, а затем бросьте.