2009年9月15日 星期二

[C#] 四捨五入之無條件進位 0.5

因為特殊用途,所以需要用到無條件進位0.5的規則,例如 1.3 要變 1.5,1.8 要變2,所以來研究一下怎麼達成。

先參考既有的方法,
http://www.allenkuo.com/EBook5/view.aspx?TreeNodeID=27&id=381
http://www.dotblogs.com.tw/yc421206/archive/2008/11/03/5852.aspx
[節錄] 舊的規則,會根據前一位數字,來決定小數點
的進位。在.NET 2.0 以後, Math.Round()多了參數,可以自訂如何進位。

其他參考:
C#無條件捨去
利用ToString()

自己生出簡單的進位 0.5 函式:
public double halfRound(double val)
{
double ten = val * 10;
double key = ten % 10;
if( key>=5 || key==0 )
return Math.Round( val, MidpointRounding.AwayFromZero);
else
return Math.Round(val, MidpointRounding.AwayFromZero)+0.5;
}
這樣子就達成目的了!

halfRound(1.2) => 1.5
halfRound(1.6) => 2