数字格式化

有时候不需要太多的小数位数,这个时候可以采用小数截断的方式实现,大概有以下几种方法:
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次方,好处是你可以控制舍入的方向。
 
 
本文转载自:http://379910987.blog.163.com/blog/static/33523797201181322557166/
posted @ 2016-03-08 14:03  七秒钟得记忆  阅读(234)  评论(0编辑  收藏  举报