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" - это float/decimal, а не целое число. Вместо десятичной.TryParse () вы можете предварительно обработать строку, удалив конечные нули, а затем сделать int.Метод tryparse(). Поэтому, если у вас есть" 2.00", вы продолжаете проверять (и отбрасывать) последний символ строки, пока не достигнете"." (десятичное число.) Если это "0" или ".- можешь бросить. В конце концов, вы получите только "2".
Int32 (int) может содержать только интегральные значения; поэтому функции Int32 Parse/TryParse не могут анализировать строки с десятичными знаками. Если строковые значения могут содержать десятичные дроби, но предназначены для представления целых чисел, используйте Decimal.Попробуйте, а затем бросьте.