国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

C#四舍五入用法實例

2019-10-29 21:02:36
字體:
來源:轉載
供稿:網友

C# 中沒有四舍五入函數,程序語言都沒有四舍五入函數,因為四舍五入算法不科學,國際通行的是 Banker 舍入法

Bankers rounding(銀行家舍入)算法,即四舍六入五取偶。事實上這也是 IEEE 規(guī)定的舍入標準。因此所有符合 IEEE 標準的語言都應該是采用這一算法的。

Math.Round 方法默認的也是 Banker 舍入法

在 .NET 2.0 中 Math.Round 方法有幾個重載方法

Math.Round(Decimal, MidpointRounding)Math.Round(Double, MidpointRounding)Math.Round(Decimal, Int32, MidpointRounding)Math.Round(Double, Int32, MidpointRounding)

將小數值舍入到指定精度。MidpointRounding 參數,指定當一個值正好處于另兩個數中間時如何舍入這個值

該參數是個 MidpointRounding 枚舉

此枚舉有兩個成員,MSDN 中的說明是:
AwayFromZero 當一個數字是其他兩個數字的中間值時,會將其舍入為兩個值中絕對值較小的值。
ToEven 當一個數字是其他兩個數字的中間值時,會將其舍入為最接近的偶數。

注 意!這里關于 MidpointRounding.AwayFromZero 的說明是錯誤的!實際舍入為兩個值中絕對值較大的值。不過 MSDN 中的 例子是正確的,英文描述原文是 it is rounded toward the nearest number that is away from zero.

所以,要實現四舍五入函數,對于正數,可以加一個 MidpointRounding.AwayFromZero 參數指定當一個數字是其他兩個數字的中間值時其舍入為兩個值中絕對值較大的值,例:

Math.Round(3.45, 2, MidpointRounding.AwayFromZero)

不過對于負數上面的方法就又不對了

因此需要自己寫個函數來處理

第一個函數:

double Round(double value, int decimals){  if (value < 0)  {    return Math.Round(value + 5 / Math.Pow(10, decimals + 1), decimals, MidpointRounding.AwayFromZero);  }  else  {    return Math.Round(value, decimals, MidpointRounding.AwayFromZero);  }}

第二個函數:

double Round(double d, int i){  if(d >=0)  {    d += 5 * Math.Pow(10, -(i + 1));  }  else  {    d += -5 * Math.Pow(10, -(i + 1));  }  string str = d.ToString();  string[] strs = str.Split('.');  int idot = str.IndexOf('.');  string prestr = strs[0];  string poststr = strs[1];  if(poststr.Length > i)  {    poststr = str.Substring(idot + 1, i);  }  string strd = prestr + "." + poststr;  d = Double.Parse(strd);  return d;}

參數:d表示要四舍五入的數;i表示要保留的小數點后為數。

其中第二種方法是正負數都四舍五入,第一種方法是正數四舍五入,負數是五舍六入。

備注:個人認為第一種方法適合處理貨幣計算,而第二種方法適合數據統(tǒng)計的顯示。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀宁县| 辛集市| 新密市| 昭平县| 仲巴县| 土默特右旗| 聂荣县| 浪卡子县| 荆门市| 黔西| 忻城县| 仁怀市| 青浦区| 花垣县| 皮山县| 杂多县| 新巴尔虎右旗| 吴忠市| 延津县| 孟州市| 闸北区| 金平| 无为县| 滨海县| 犍为县| 江永县| 都江堰市| 安庆市| 东方市| 永顺县| 东阳市| 乐平市| 丰顺县| 遵义市| 正阳县| 舒兰市| 扶风县| 杭锦旗| 宜都市| 平顶山市| 蓝田县|