C#函數執行四捨五入的結果與Delphi相同,結果都是四捨六入五成雙,也就是遇到五則是是看前面位數是奇數還是偶數前面是奇數才進位,偶數就捨位。
ex:
Console.WriteLine( Math.Round( 3.5 ) ); //奇數進位 4
Console.WriteLine( Math.Round( 4.5 ) ); //偶數捨位 4
Console.WriteLine( Decimal.Round( 3.5m, 0) ); // 同上 4
Console.WriteLine( Decimal.Round( 4.5m, 0) ); // 4

藍色小舖有許多高手討論出一些解決方法,整理如下:
[方法一]自己寫
比如數字 N 要取到小數點2位:
1.先將N*100
2.加0.5 --> N*100+0.5
3.無條件捨去(N*100+0.5)的小數點
4.再除以100
如果要取到小數點1位,就把上面100的地方改為10
ex:
    四捨五入
    dNum = 4.5; 
    dNum = Math.Floor(dNum+0.5);   

    取小數後兩位 
    dNum = 0.345; 
    dNum = Math.Floor(dNum*100+0.5) / 100; 

[方法二]利用ToString()格式化
    double dd = 100.56; 
    dd.ToString("0"); //結果 101 
    dd.ToString("0.0"); //結果 100.6 

[方法三]內建函式參數 MidpointRounding.AwayFromZero (VS2003好像還沒有這個功能,用VS2010已經有這個功能了)
double d1 = 3.5, d2 = 4.5;
Math.Round(d1, 0, MidpointRounding.AwayFromZero); //四捨五入 4
Math.Round(d2, 2, MidpointRounding.AwayFromZero); //四捨五入 5 


arrow
arrow
    文章標籤
    程式設計
    全站熱搜

    失落的一角 發表在 痞客邦 留言(0) 人氣()