对于“#”,int.TryParse()返回false##&”;

本文关键字:返回 false## TryParse int 对于 | 更新日期: 2023-09-27 18:30:04

我有一个函数,它接收字符串参数并将其转换为整数
为了安全转换,使用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无法解析数字

为什么?知道吗?

@更新
抱歉,伙计们,我的概念错了。我是c#的新手,我认为Int.TryParse()会返回整数部分并忽略小数。但它不会,甚至Convert.ToInt32("string")
谢谢大家。

对于“#”,int.TryParse()返回false##&”;

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

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的整数值。

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

2.00和4.00不是整数;它们是刚好在小数点后有0的十进制值。如果要分析小数,请使用十进制。TryParse()或双精度。TryParse(),然后截断它们或检查零值尾数。

2.00和4.00不是Integer数据类型,这就是为什么。如果你想让这些成为真的,那就加倍努力。TryParse()或十进制。TryParse()

由于十进制数不是整数,因此解析失败。

井2.00是一个十进制数,而不是计算机眼中的int。

Int32(int)只能包含整数值;因此Int32 Parse/TryParse函数不能解析具有小数的字符串。如果字符串值可能包含小数,但用于表示整数,请使用Decimal.TryParse,然后进行强制转换。

因为"2.00"是十进制,而不是整数。

为什么还要使用turnery运算符?TryParse方法自己处理异常,并在输出参数中返回0。要想通过更多的例子来理解它,请参阅这里的好文章。

public IEnumerable<object> ReportView(string param1, string param2)
{
  decimal storeId, titleId;
  decimal.TryParse(param1, out storeId);
  decimal.TryParse(param1, out titleId);
  IEnumerable<object> detailView = new Report().GetData(storeId, titleId);
  return detailView;
}