int.TryParse为整数值返回false

时间:2016-05-17 12:01:51

标签: c#

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

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

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

我在这里缺少什么?

编辑: 显然,DB中的值保存为十进制,因此实际值为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。这就是函数失败的原因。

3 个答案:

答案 0 :(得分:1)

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

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

N0说给我没有小数位。你也可以使用这个N1,N2等...

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

对于转换类似2.0000或2M的内容,您需要将其转换为像decimal.TryParse(value)这样的十进制数,因此您可以使用Decimal.ToInt32(value)将小数转换为int

有关详细信息,请参阅此MSDN页面