我有一个函数接收字符串参数并将它们转换为整数。
为了安全转换,使用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”) - &gt; int.Tryparse成功解析数字
函数调用ReportView(“2.00”,“4.00”) - &gt; int.TryParse无法解析数字
为什么呢?有什么想法吗?
@Update
对不起,伙计们,我的观念错了。我是c#的新手,我以为Int.TryParse()将返回整数部分并忽略小数。但它不会,甚至Convert.ToInt32(“string”)
谢谢大家。
答案 0 :(得分: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;
}
以上内容适用于Integer或Decimal字符串。请注意,“2.123”形式的字符串将导致返回2的Integer值。
答案 1 :(得分:5)
int.TryParse不会尝试解析字符串并将其转换为整数以防万一。您需要使用decimal.TryParse作为十进制数字字符串。
答案 2 :(得分:3)
2.00和4.00不是整数。如果要解析小数,请使用decimal.TryParse()或double.TryParse(),然后截断它们或检查零值尾数。
答案 3 :(得分:3)
对于计算机“2.00”是浮点数/小数,而不是整数。您可以通过删除尾随零来预处理字符串,然后执行int.TryParse(),而不是使用decimal.TryParse()。因此,如果你有“2.00”,你会继续检查(并删除)字符串的最后一个字符,直到你到达“。”。 (十进制)。如果是“0”或“。”你可以放弃它。最后,你最终只会得到“2”。
答案 4 :(得分:2)
2.00和4.00不是Integer数据类型 - 这就是原因。如果你想要那些是真的尝试,double.TryParse()或decimal.TryParse()
答案 5 :(得分:2)
好2.00是十进制数,而不是计算机眼中的int。
答案 6 :(得分:1)
无法解析,因为十进制数不是整数。
答案 7 :(得分:1)
因为“2.00”是小数,而不是整数。
答案 8 :(得分:1)
Int32(int)只能包含整数值;因此Int32 Parse / TryParse函数不能解析带小数的字符串。如果您的字符串值可能包含小数但是要表示整数,请使用Decimal.TryParse然后强制转换。