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

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
Извините, ребята, моя концепция была неправильной. Я новичок в С#, я думал, Int.TryParse() вернет неотъемлемую часть и проигнорирует десятичные знаки. Но это не будет, даже Convert.ToInt32 ( "строка" )
Спасибо всем.

4b9b3361

Ответ 1

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.

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

Не удается выполнить синтаксический анализ, поскольку десятичные числа не являются целыми числами.

Ответ 8

Потому что "2.00" - это десятичное, а не целое число.

Ответ 9

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