C#中怎么實(shí)現(xiàn)四舍五入

本篇文章給大家分享的是有關(guān)C#中怎么實(shí)現(xiàn)四舍五入,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)王屋免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了成百上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

C# 中沒有四舍五入函數(shù),程序語言都沒有四舍五入函數(shù),因?yàn)樗纳嵛迦胨惴ú豢茖W(xué),國際通行的是 Banker 舍入法

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

Math.Round 方法默認(rèn)的也是 Banker 舍入法

在 .NET 2.0 中 Math.Round 方法有幾個(gè)重載方法

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

將小數(shù)值舍入到指定精度。MidpointRounding 參數(shù),指定當(dāng)一個(gè)值正好處于另兩個(gè)數(shù)中間時(shí)如何舍入這個(gè)值

該參數(shù)是個(gè) MidpointRounding 枚舉

此枚舉有兩個(gè)成員,MSDN 中的說明是:
AwayFromZero 當(dāng)一個(gè)數(shù)字是其他兩個(gè)數(shù)字的中間值時(shí),會(huì)將其舍入為兩個(gè)值中絕對(duì)值較小的值。
ToEven 當(dāng)一個(gè)數(shù)字是其他兩個(gè)數(shù)字的中間值時(shí),會(huì)將其舍入為最接近的偶數(shù)。

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

所以,要實(shí)現(xiàn)四舍五入函數(shù),對(duì)于正數(shù),可以加一個(gè) MidpointRounding.AwayFromZero 參數(shù)指定當(dāng)一個(gè)數(shù)字是其他兩個(gè)數(shù)字的中間值時(shí)其舍入為兩個(gè)值中絕對(duì)值較大的值,例:

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

不過對(duì)于負(fù)數(shù)上面的方法就又不對(duì)了

因此需要自己寫個(gè)函數(shù)來處理

第一個(gè)函數(shù):

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);
  }
}

第二個(gè)函數(shù):

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;
}

參數(shù):d表示要四舍五入的數(shù);i表示要保留的小數(shù)點(diǎn)后為數(shù)。

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

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

以上就是C#中怎么實(shí)現(xiàn)四舍五入,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:C#中怎么實(shí)現(xiàn)四舍五入
文章鏈接:http://muchs.cn/article36/pdjcsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)ChatGPT、網(wǎng)站設(shè)計(jì)、、電子商務(wù)、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名