我使用Convert.ChangeType()将Object(我从DataBase获得)转换为泛型类型T.代码如下所示:
T element = (T)Convert.ChangeType(obj, typeof(T));
return element;
并且这在大多数情况下都很有用,但是我发现如果我尝试将某些内容简单地转换为返回以下sql查询
select 3.2
上面的代码(T为double)不会返回3.2,而是3.2000000000000002。我不明白为什么会这样,或者如何解决它。请帮忙!
答案 0 :(得分:7)
您所看到的是浮点数在内存中表示的方式。关于为什么会这样,有很多可用的信息,但this paper是一个很好的信息。这种现象就是为什么你最终会出现看似异常的行为。永远不应该向未格式化的用户显示double
或single
,并且应该避免像瘟疫这样的平等比较。
如果您需要精确到更高精度的数字(即代表货币值),请使用decimal
。
答案 1 :(得分:4)
这可能是因为floating point arithmetic。您可能应该使用十进制而不是双精度。
答案 2 :(得分:2)
这不是转换的问题。内部双重类型表示实数的2的无限分数,这就是为什么你得到这样的结果。根据您的目的使用: