注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

C#中的小数截断  

2011-09-13 14:31:56|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
有时候不需要太多的小数位数,这个时候可以采用小数截断的方式实现,大概有以下几种方法:
1.ToString控制格式
例如a是一个double型的数,为了只保留4位有效数字,可以采用该方法:
a=Convert.ToDouble(a.ToString("#.0000"));
这样就是直接截断,注意没有四舍五入,对于123.12348和123.12344截断的结果是一样的。
2.四舍五入的方法
这个使用了Math类下的静态方法Round
根据MSDN中的提示,Round的一个函数是这样定义的:
public static double Round(double value,int digits)
其中values是要舍入的双精度浮点数,而digits是返回值中的小数位数,注意digits介于0到15之间
这个时候
对于123.12345和123.12344:
a=Math.Round(123.12348,4);//123.1235
a=Math.Round(123.12344,4);//123.1234
注意这里有个问题,对于123.12345保留四位小数,一定是123.1235吗?
不一定。Round舍入有时称为就近舍入或四舍六入五成双。 它可以将因单方向持续舍入中点值而导致的舍入误差降到最低。 若要控制 Round(Double, Int32) 方法使用的舍入类型,请调用 Math.Round(Double, Int32, MidpointRounding) 重载。 由于用十进制数表示浮点数或对浮点数进行算术运算可能导致的误差,在某些情况下,Round(Double, Int32) 方法可能不会对中点值四舍五入到在 digits 位置中最近的偶数值。 如下面的示例所示,其中 2.135 将舍入为 2.13 而不是 2.14。 这是因为在内部该方法将 value 乘以10 *digits,并且乘法运算在这种情况下会损失精度。 
3.Floor和Ceiling方法
这种方法是先乘以10的N次方,然后Floor或者Ceiling,再除以10的N次方,好处是你可以控制舍入的方向。
  评论这张
 
阅读(1965)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016