繁体   English   中英

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

[英]C# Wrong conversion using Convert.ChangeType()

我使用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。 我不明白为什么会这样,或者如何解决它。 请帮忙!

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

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

这可能是因为浮点运算 您可能应该使用decimal而不是double。

这不是转换的问题。 内部双重类型表示实数的2的无限分数,这就是为什么你得到这样的结果。 根据您的目的使用:

  • 十进制
  • 或使用精确格式{0:F2}
  • 使用Math.Flor / Math.Ceil

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM