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 ( "строка" )
Спасибо всем.
Ответы
Ответ 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, а затем нажмите.