首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Convert.ChangeType扰乱返回值

Convert.ChangeType扰乱返回值
EN

Stack Overflow用户
提问于 2018-07-25 21:09:42
回答 1查看 167关注 0票数 0

在我们的代码库中,我们已经进行了多年的验证,到目前为止,代码库一直做得很好。当四位小数点以下的值开始出现时,问题就开始发生了。可视化地检查下面的代码行;

代码语言:javascript
复制
//upto 3 decimal, returns just fine
//temp is equal to 1000.003
var temp = System.Convert.ChangeType("1000.003", TypeCode.Single);

//Test for values upto 4 decimals
//Iteration:1 
//Supplied 1000.0001 Return 1000.00012
var temp1 = System.Convert.ChangeType("1000.0001", TypeCode.Single);

//Iteration:2
//Supplied 1000.0004 Return 1000.00043
var temp2 = System.Convert.ChangeType("1000.0004", TypeCode.Single);

//Iteration:3
//Supplied 1000.0007 Return 1000.00067
var temp3 = System.Convert.ChangeType("1000.0007", TypeCode.Single);

它为什么要这样做?另一件事是,如果我将TypeCode更改为double,那么精度就会被保存,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-25 21:19:36

来自MSDN

单个值的精度可达7位小数位数,但在内部保持最多9位数。

您所遇到的情况是,您传入的数字不能准确地表示为Single,因此它给出了它能提供的最接近的Single值。如果必须准确地保留十进制表示,那么Decimal是一个更合适的类型。

请注意,小数点后面有四位数字这一事实与此无关。像100,000,010这样的数字你也会遇到同样的问题

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51527696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档