【问题标题】:int.TryParse() returns false for "#.##"int.TryParse() 为“#.##”返回 false
【发布时间】:2012-04-04 14:24:24
【问题描述】:

我有一个接收字符串参数并将它们转换为整数的函数。
为了安全转换,使用 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")
谢谢大家。

【问题讨论】:

  • 您还应该指定一种文化。
  • 我不明白为什么这被否决了。这个问题显然是一个初学者问题,但它很清楚,而且表述得相当好。
  • @moguzalp 人们在提问时是否应该因为不知道某事而被否决?
  • @moguzalp:我打赌等效的解析代码可以在多种语言中使用。我很高兴它在 C# 中不像那样工作......但对于新手来说,它并不像你或我认为的那样不言而喻。
  • 在编写此代码时,我认为 int.TryParse 会返回整数部分并忽略小数。谢谢大家,这是一个错误。

标签: c# tryparse


【解决方案1】:
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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            解析失败,因为十进制数不是整数。

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  【解决方案9】:

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2013-09-18
                    • 2017-05-17
                    • 2011-05-05
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多