2012-04-04 1 views
12

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

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

+1

Вы также должны указать культуру. – CodesInChaos

+4

Я не понимаю, почему это занижено. Вопрос, безусловно, является вопросом новичков, но он понятен и достаточно хорошо сформулирован. –

+1

@moguzalp Должны ли люди забираться из-за незнания чего-то, когда они задают вопрос? –

ответ

6
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» приведут к возврату значения Integer 2.

5

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

2

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

1

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

1

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

2

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

3

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

1

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

2

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