我正在尝试解析一个非常小的数字(范围从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
。这就是函数失败的原因。
答案 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页面