【问题标题】:int.TryParse returns false for integer valuesint.TryParse 为整数值返回 false
【发布时间】:2016-05-17 20:34:41
【问题描述】:

我正在尝试解析一个非常小的数字(范围从 0 到 20)。所以,我知道这不是尺寸问题。但是我的代码仍然一直返回 false。

parseResult = int.TryParse(tempResult.ToString().Trim(), out Result);

这里的 tempResult 是一个对象类型,因为值可以是整数或字符串。我收到的值是一个整数(准确地说是 2)。然而, parseResult 总是错误的。

我在这里错过了什么?

编辑: 显然数据库中的值保存为十进制,因此实际值为 2M,而不是 2.0000。现在,如何解决这个问题。我不需要尾随零,只需要小数点前的值。

编辑: 该值可以是字符串或小数。我只想使用小数部分。我总是可以直接转换为十进制,但如果值是字符串,那将不起作用。

编辑:

全功能:

            object tempResult = bqObject.GetSingleValue(strQuery);
        //get value from the system param table
        if (tempResult == null)
        {
            tempResult = bqObject.GetSingleValue(strSysParamQuery);
        }
        //validate database values
        if (tempResult == null)
        {
            throw new BaseException("DB100001");
        }
        else
        {
            parseResult = int.TryParse(tempResult.ToString().Trim(), out Result);

            if (!parseResult)
            {
                throw new BaseException("DB100002");
            }
        }

第一个查询读取一个 nvarchar 列,而第二个查询读取十进制列。所以,我试图将两者解析为字符串,然后解析为 int。问题是当值以十进制形式出现时,tempResult.ToString().Trim() 行将其转换为2M 而不是2.0000。这就是函数失败的原因。

【问题讨论】:

  • 做 var test = tempResult.ToString().Trim();然后调试并查看值。看起来还好吗?
  • tempResult.ToString().Trim() 的确切值是多少?结果是什么类型?
  • 你能给我们举一个tempResult的值的例子,它支持返回true吗?
  • 我打赌你的字符串只是对象。
  • 如果您已经有一个Int32 的对象,为什么还要将其转换为字符串并首先调用TryParse

标签: c#


【解决方案1】:

如果你传入一个十进制值,那么整数解析将返回 false。你有几个选择。如果您知道它始终是十进制格式,请更改为使用 decimal.TryParse 而不是 int.TryParse 或者,如果您不知道它是整数还是小数并且希望所有结果都是整数,就像您一样已经在调用 ToString,传入一个字符串格式化程序“N0”。

int.TryParse(tempResult.ToString("N0").Trim(), out Result);

N0 说不要给我小数位。你也可以用这个N1、N2等……

这将始终删除小数(有效地执行 Math.Floor(),这可能不是您想要的,在这种情况下您应该使用 Math. 方法来获得所需的精度。

【讨论】:

  • 谢谢。这行得通。使用N0 正确地将小数转换为字符串。
【解决方案2】:

您可能想尝试Convert.ToInt32,而不是解析。这会处理大多数转换 - 只要您获得基本类型。

如果你得到null 值,你只需要小心——在这种情况下,Convert.ToInt32 返回0int.TryParse 会抛出异常。如果这是您必须处理的事情,则必须在转换值之前添加额外的空检查。

【讨论】:

    【解决方案3】:

    要转换 2.0000 或 2M 之类的值,您需要将其转换为像 decimal.TryParse(value) 这样的小数,因此您可以使用 Decimal.ToInt32(value) 将小数转换为 int

    更多信息你可以看这个MSDN页面

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多