C#使用Convert.ChangeType()进行错误的转换

Dav*_*jak 2 c# generics casting

我使用Convert.ChangeType()从Object(我从DataBase获得)转换为泛型类型T.代码如下所示:

T element = (T)Convert.ChangeType(obj, typeof(T));
return element;
Run Code Online (Sandbox Code Playgroud)

并且这在大多数情况下工作得很好,但是我发现如果我尝试抛出一些简单的东西,就像返回以下sql查询一样

select 3.2
Run Code Online (Sandbox Code Playgroud)

上面的代码(T为double)不会返回3.2,而是3.2000000000000002.我不明白为什么会这样,或者如何解决它.请帮忙!

Ada*_*son 7

您所看到的是浮点数在内存中表示的方式.关于这是为什么会有相当多的信息,但是这篇论文很好.这种现象就是为什么你最终会出现看似异常的行为.A double或者single永远不应该向未格式化的用户显示,你应该避免像瘟疫这样的平等比较.

如果您需要精确到更高精度的数字(即表示货币值),请使用decimal.