2012年1月7日

[C#] 小數點以下無條件進位至某位數

最近因為網頁的某些需求中需要小數點以下無條件進位,所以就研究了一下
public static double RoundUp(double input, int num)
{
    double tmpNum = Math.Floor(input);
    if ((input - tmpNum) > 0) //判斷input是否為整數
    {
        if ((input - Math.Round(input, num)) != 0) //判斷所要取的位數是否存在
        {
            //利用四捨五入的方法判斷是否要進位,若取的下一位數大於等於5則不用進位
            if (Convert.ToInt32(input * Math.Pow(10, num + 1) % 10) < 5)
            {
                return Math.Round(input, num, MidpointRounding.AwayFromZero) + Math.Pow(0.1, num);
            }
            else
            {
                return Math.Round(input, num, MidpointRounding.AwayFromZero);
            }
        }
        else
        {
            return input;
        }
    }
    else
    {
        return input;
    }
}

說明:

方法接收的參數第一個是要處理的浮點數,第二個是要取到小數點以下哪個位數並無條件進位。
如果輸入的參數為整數或要取的位數大於輸入的參數則回傳input

Example:

RoundUp(12.432, 2) = 12.44
RoundUp(13.5648, 3) = 13.565