程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#編程完成四捨五入、向上及下取整的辦法

C#編程完成四捨五入、向上及下取整的辦法

編輯:C#入門知識

C#編程完成四捨五入、向上及下取整的辦法。本站提示廣大學習愛好者:(C#編程完成四捨五入、向上及下取整的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是C#編程完成四捨五入、向上及下取整的辦法正文


本文實例講述了C#編程完成四捨五入、向上及下取整的辦法。分享給年夜家供年夜家參考,詳細以下:

在處置一些數據時,我們願望能用“四捨五入”法完成,然則C#采取的是“四捨六入五成雙”的辦法,以下面的例子,就是用“四捨六入五成雙”獲得的成果:

double d1 = Math.Round(1.25, 1);//1.2
double d2 = Math.Round(1.24, 1);//1.2
double d3 = Math.Round(1.26, 1);//1.3
double d4 = Math.Round(1.35, 1);//1.4

為了用C#來完成“四捨五入”,我寫了上面的函數:

代碼

/// <summary>
/// 完成數據的四捨五入法
/// </summary>
/// <param name="v">要停止處置的數據</param>
/// <param name="x">保存的小數位數</param>
/// <returns>四捨五入後的成果</returns>
private double Round(double v, int x)
{
  bool isNegative = false;
  //假如是正數
  if (v < 0)
  {
   isNegative = true;
   v = -v;
  }
  int IValue = 1;
  for (int i = 1; i <= x; i++)
  {
   IValue = IValue * 10;
  }
  double Int = Math.Round(v * IValue + 0.5, 0);
  v = Int / IValue;
  if (isNegative)
  {
   v = -v;
  }
  return v;
}

經由簡略的測試,下面的函數能完成對數據的四捨五入法。

Math.Round ()在四捨五入時有個成績: 

Math.Round(2.5,0) = 2; 
Math.Round(3.5,0) = 4;

2.5應當等於3才對!

在ASP中也存在這個成績,不外ASP中還有個FormatNumber可以用,但今朝還不曉得怎樣應用?

說明:

Math.Round()精確的說,這個函數不是四捨五入,而是四捨六入五湊偶,就是說小於4或年夜於6的該捨該入是沒有爭議的,而5處在正中央,假如四捨五入則會形成數據的全體誤差,所以采用的准繩是:假如捨入位為5,則捨入後最初一名為偶數,這是國際通例。

如今做的項目都要5入,處理辦法:

今朝做法是:

如:(3.45*10+0.5)取整,再除以10

C# 中沒有四捨五入函數,現實上我曉得的法式說話都沒有四捨五入函數,由於四捨五入算法不迷信,國際通行的是 Banker 捨入法 Banker 's rounding(銀內行捨入)算法,即四捨六入五取偶。現實上這也是 IEEE 劃定的捨入尺度。是以一切相符 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 列舉

此列舉有兩個成員:

AwayFromZero 當一個數字是其他兩個數字的中央值時,會將其捨入為兩個值中相對值較年夜的值。

ToEven 當一個數字是其他兩個數字的中央值時,會將其捨入為最接近的偶數。

所以,要完成四捨五入函數,關於負數,可以加一個 MidpointRounding.AwayFromZero 參數指定當一個數字是其他兩個數字的中央值時其捨入為兩個值中相對值較年夜的值,例:

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

不外關於正數下面的辦法就又纰謬了

是以須要本身寫個函數來處置

double ChinaRound(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); 
 } 
} 

有些時刻紛歧定要用四捨五入的,能夠須要上取整或下取整:

Math.Ceiling()和Math.Floor

Math.Ceiling(3.1)=4; 
Math.Floor(3.9)=3;

取天板值與地板值,與"四捨五入"有關。其實Floor的成果與(int)雷同,是以也能夠如許寫Math.Floor((double)2/3+0.5)

floor 和 ceil是math unit 裡的函數,應用前要先 Uses Math。

trunc 和 round 是system unit 裡的函數,缺省便可以用。

floor 直接往小的取,好比 floor(-123.55)=-124,floor(123.55)=123

trunc 直接切下整數,好比 trunc(-123.55)=-123, floor(123.55)=123

ceil 直接往年夜的取,好比 ceil(-123.55)=-123, ceil(123.55)=124

round 盤算四捨五入,好比 round(-123.55)=-124,round(123.55)=124

C#取整函數向上取整實例

int a = 5; 
int b = 2; 
lbl.Text = Convert.ToString(Math.Ceiling((double)a / (double)b)); 

願望本文所述對年夜家C#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved