1. 程式人生 > >C# 四捨五入 (解決四捨六入五成雙的問題)

C# 四捨五入 (解決四捨六入五成雙的問題)

四捨六入五成雙是一種精確度的計數保留法.舍入規律是"四捨六入五成雙",這裡"四"是小於五的意思,"六"是大於五的意思,"五"是舍入位之後的尾數逢五的話看前一位,奇進偶不進,就像1.25,因為2是偶數,所以是1.2。又像1.35,因為3是奇數,所以是1.4,明不明白,這個是資料統計需要的.

        從統計學的角度,"四捨六入五成雙"比"四捨五入"要科學,它使舍入後的結果有的變大,有的變小,更平均.而不是像四捨五入那樣逢五就入,導致結果偏向大數.
例如:1.15+1.25+1.35+1.45=5.2,若按四捨五入取一位小數計算
1.2+1.3+1.4+1.5=5.4
按"四捨六入五成雙"計算,1.2+1.2+1.4+1.4=5.2,舍入後的結果更能反映實際結果
例:

  四捨六入五成雙:

 Math.Round(43.5,0) --44.0

 Math.Round(42.5,0) --42.0
解決方法如下
 1.只要求保留N位不四舍5入
   float f = 0.55555f;           int i =(int)(f * 100);           f = (float)(i*1.0)/100;

 2.保留N位,四捨五入 
  decimal d= decimal.Round(decimal.Parse("0.55555"),2);
 
 3.保留N位四捨五入     **********************   
  double dbdata = 0.55555;           string str1 = bdata.ToString("F2");//fN 保留N位,四捨五入

 4.保留N位四捨五入  *******************      
  string result =String.Format("{0:N2}", 0.55555);//2位
  string result = String.Format("{0:N3}", 0.55555);//3位

 5.保留N位四捨五入   *****************
 double s=0.55555;        
  result=s.ToString("#0.00");//點後面幾個0就保留幾位