场景1:git
C#保留2位小数,.ToString("f2")确实能够,可是若是这个数字原本就小数点后面三位好比1.253,那么转化以后就会变成1.25.可不能够恰好保留到最后一位不是0的位置?
默认保留2位,若是真的有3位小数,就保留3位,有4位就保留4位。ide
先说一下ToString("0.00##")中0和#的区别:
0 表明占位的。若是ToString("0.00") 这样就是保留两位小数,不管小数有多少位或者无小数,结果都是两位小数。例如 1.1234 那么结果是1.12。若是是1.2 那么结果会补零,为1.20。
# 表明后面的不是零就被保留,若是是0就去掉。例如ToString("0.##") 那么1.20的话结果是1.2。orm
对于场景1的问题,默认有两位就是00,其它的若是大于两位就不是零就保留的话,能够下面这样写:ci
double dd = 1.2530;
string ret = dd.ToString("0.00####"); // 1.253string
场景2:it
根据国际惯例,有时候咱们须要对超出的位数“四舍五入”。用C# 实现保留两位小数的方法有不少,经常使用的总结以下:io
一、Math.Round(0.333333,2);//按照四舍五入的国际标准
二、double dbdata=0.335333; string str1=String.Format("{0:F}",dbdata);//默认为保留两位
三、float i=0.333333; int j=(int)(i * 100); i = j/100;
四、decimal.Round(decimal.Parse("0.3333333"),2)
五、private System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();class
float test=0.333333f;test
nfi.NumberDecimalDigits=2;float
string result=test.ToString("N", nfi);
六、string result= String.Format("{0:N2}",Convert.ToDecimal("0.333333").ToString()); 七、Convert.ToDecimal("0.33333333").ToString("0.00");