場景1: C#保留2位小數,.ToString("f2")確實可以,但是如果這個數字本來就小數點後面三位比如1.253,那麼轉化之後就會變成1.25.可不可以剛好保留到最後一位不是0的位置?預設保留2位,如果真的有3位小數,就保留3位,有4位就保留4位。 先說一下ToString("0.00##") ...
場景1:
C#保留2位小數,.ToString("f2")確實可以,但是如果這個數字本來就小數點後面三位比如1.253,那麼轉化之後就會變成1.25.可不可以剛好保留到最後一位不是0的位置?
預設保留2位,如果真的有3位小數,就保留3位,有4位就保留4位。
先說一下ToString("0.00##")中0和#的區別:
0 代表占位的。如果ToString("0.00") 這樣就是保留兩位小數,無論小數有多少位或者無小數,結果都是兩位小數。例如 1.1234 那麼結果是1.12。如果是1.2 那麼結果會補零,為1.20。
# 代表後面的不是零就被保留,如果是0就去掉。例如ToString("0.##") 那麼1.20的話結果是1.2。
對於場景1的問題,預設有兩位就是00,其它的如果大於兩位就不是零就保留的話,可以下麵這樣寫:
double dd = 1.2530; string ret = dd.ToString("0.00####"); // 1.253
場景2:
根據國際慣例,有時候我們需要對超出的位數“四捨五入”。用C# 實現保留兩位小數的方法有很多,常用的總結如下:
1、Math.Round(0.333333,2);//按照四捨五入的國際標準
2、double dbdata=0.335333; string str1=String.Format("{0:F}",dbdata);//預設為保留兩位
3、float i=0.333333; int j=(int)(i * 100); i = j/100;
4、decimal.Round(decimal.Parse("0.3333333"),2)
5、private System.Globalization.NumberFormatInfo nfi = new System.Globalization.NumberFormatInfo();
float test=0.333333f;
nfi.NumberDecimalDigits=2;
string result=test.ToString("N", nfi);
6、string result= String.Format("{0:N2}",Convert.ToDecimal("0.333333").ToString());
7、Convert.ToDecimal("0.33333333").ToString("0.00");