2012-04-04 108 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(“字符串”)
感谢所有。

+1

你还应该指定一种文化。 – CodesInChaos 2012-04-04 14:27:25

+4

我不明白为什么这是downvoted。这个问题显然是一个初学者问题,但它很清楚,而且制定得相当完备。 – 2012-04-04 14:29:00

+1

@moguzalp当人们提出一个问题时,人们是否应该因为不知道某事而被低估? – 2012-04-04 14:37:26

回答

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”的字符串将导致返回2的整数值。

5

int.TryParse不会尝试解析字符串并将其转换为整数以防万一。您需要使用decimal.TryParse作为十进制数字字符串。

2

2.00和4.00不是Integer数据类型 - 这就是为什么。如果你想让它们成为true,请尝试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”是浮点数/小数点,而不是整数。不用做decimal.TryParse(),你可以通过删除尾部零来预处理字符串,然后执行int.TryParse()。所以如果你有“2.00”,你会继续检查(和放下)字符串的最后一个字符,直到到达“。”。 (十进制)。如果它是“0”或“。”你可以放弃它。最后你会以“2”结束。