【C#】 Math.Round (128.5) = 128 真假四捨五入?

  • 24153
  • 0
  • c#
  • 2019-05-08

C# 中要四捨五入 第一個會想到 Math.Round

Math.Round (128.5)  應該要等於 129 。

但結果是128 ?! 這是Math.Round的Bug嗎XD

讓我們一起看下去.....

查了MSDN才發現... Math.Round MSDN

 

Math.Round 四捨五入有兩種方式

  1. MidpointRounding.AwayFromZero 遠離零四捨五入
    1. 中間值會四捨五入到下一個數字背離零。 比方說,3.75 捨入至 3.8 3.85 四捨五入為 3.9,-3.75 捨入至-3.8,和-3.85 會捨入為-3.9。 這種形式的捨入由 列舉型別成員。

      遠離零四捨五入為最廣泛的已知的表單的捨入。

  2. MidpointRounding.ToEven  捨入至最接近值或五成雙
    1. 中間值會四捨五入至最接近的偶數。 比方說,3.75 和 3.85 捨入 3.8,並捨入到-3.8-3.75 和-3.85。 這種形式的捨入由列舉型別成員。
 

預設使用:MidpointRounding.ToEven 

 

decimal m = 128.5m;
Console.WriteLine(Math.Round(m));  //128
Console.WriteLine(Math.Round(m,0, MidpointRounding.AwayFromZero)); //129

 

Math.Round(128.5) 使用預設:MidpointRounding.ToEven  四捨五入至最接近的偶數是128  結果就是128

Math.Round(128.5) 使用預設:MidpointRounding.AwayFromZero  四捨五入是129  結果就是129

 

小結:

所以真的要四捨五入 請使用 Math.Round(Num,0, MidpointRounding.AwayFromZero)

 


如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^