17

我有一个接收字符串参数并将它们转换为整数的函数。
为了安全转换 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# 的新手,我认为 Int.TryParse() 会返回整数部分并忽略小数。但它不会,甚至 Convert.ToInt32("string")
谢谢大家。

4

9 回答 9

7

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

于 2012-04-04T14:25:58.143 回答
7
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。

于 2012-04-04T14:41:29.817 回答
4

2.00 和 4.00 不是整数;它们是小数点后恰好有 0 的十进制值。如果要解析小数,请使用 decimal.TryParse() 或 double.TryParse(),然后截断它们或检查零值尾数。

于 2012-04-04T14:26:58.117 回答
4

对于计算机,“2.00”是浮点数/十进制数,而不是整数。您可以通过删除尾随零来预处理字符串,然后执行 int.TryParse(),而不是执行 decimal.TryParse()。因此,如果您有“2.00”,则继续检查(并删除)字符串的最后一个字符,直到到达“。” (十进制)。如果是“0”或“.” 你可以放下它。最后你会得到“2”。

于 2012-04-04T15:36:18.087 回答
3

2.00 和 4.00 不是整数数据类型 - 这就是原因。如果您希望这些是真的,请尝试 double.TryParse() 或 decimal.TryParse()

于 2012-04-04T14:26:17.327 回答
2

它无法解析,因为十进制数不是整数。

于 2012-04-04T14:26:18.807 回答
2

好吧 2.00 是十进制数,而不是计算机眼中的 int 。

于 2012-04-04T14:26:40.087 回答
2

一个 Int32(int) 只能包含整数值;因此 Int32 Parse/TryParse 函数无法解析带小数的字符串。如果您的字符串值可能包含小数但旨在表示整数,请使用 Decimal.TryParse 然后强制转换。

于 2012-04-04T14:27:32.863 回答
1

因为“2.00”是小数,而不是整数。

于 2012-04-04T14:26:31.943 回答