C# 四捨五入, 四捨六入, 無條件捨去, 無條件進位 總整理

主要方法介紹:
  • Math.Floor 方法:傳回小於或等於指定數字的最大整數值
  • Math.Ceiling 方法:傳回大於或等於指定數字的最小整數值
  • Math.Round 方法:將值四捨五入或四捨六入為最接近的整數或是指定的小數位數(後面有範例)
註: 上面的方法只有 Math.Round(四捨五入) 可以指定到第幾位,另外兩個都是直接取到整數

無條件進位

  
Console.WriteLine("無條件進位");
double d = 3.14;
d = d > 0 ? Math.Ceiling(d) : Math.Floor(d);
Console.WriteLine(d); // 4


無條件進位的範例輸出:
  
 3    ->  3
 3.14 ->  4
-3.14 -> -4
-3    -> -3


無條件捨去

  
Console.WriteLine("無條件捨去");
double d = 3.14;
d = d > 0 ? Math.Floor(d) : Math.Ceiling(d);
Console.WriteLine(d);


無條件捨去的範例輸出:
  
 3    ->  3
 3.14 ->  3
-3.14 -> -3
-3    -> -3


四捨五入

(感謝網友 Makoto 補充)
  
Console.WriteLine(Math.Round(1.5, MidpointRounding.AwayFromZero));  // 2
Console.WriteLine(Math.Round(2.5, MidpointRounding.AwayFromZero));  // 3
Console.WriteLine(Math.Round(3.5, MidpointRounding.AwayFromZero));  // 4
Console.WriteLine(Math.Round(4.5, MidpointRounding.AwayFromZero));  // 5
Console.WriteLine(Math.Round(5.5, MidpointRounding.AwayFromZero));  // 6
Console.WriteLine(Math.Round(6.5, MidpointRounding.AwayFromZero));  // 7
Console.WriteLine(Math.Round(7.5, MidpointRounding.AwayFromZero));  // 8
Console.WriteLine(Math.Round(8.5, MidpointRounding.AwayFromZero));  // 9
Console.WriteLine(Math.Round(9.5, MidpointRounding.AwayFromZero));  // 10
Console.WriteLine(Math.Round(10.5, MidpointRounding.AwayFromZero)); // 11


四捨五入到小數點後第三位:
  
Console.WriteLine(Math.Round(3.1415, 3, MidpointRounding.AwayFromZero)); // 3.142


四捨六入

四捨六入,五的話則是看個位數是奇數還偶數,奇數進位,偶數不進位 直接看範例:
  
Console.WriteLine(Math.Round(3.0)); // 3
Console.WriteLine(Math.Round(3.1)); // 3
Console.WriteLine(Math.Round(3.2)); // 3
Console.WriteLine(Math.Round(3.3)); // 3
Console.WriteLine(Math.Round(3.4)); // 3
Console.WriteLine(Math.Round(3.5)); // 4
Console.WriteLine(Math.Round(3.6)); // 4
Console.WriteLine(Math.Round(3.7)); // 4
Console.WriteLine(Math.Round(3.8)); // 4
Console.WriteLine(Math.Round(3.9)); // 4
Console.WriteLine(Math.Round(4.0)); // 4


接下來是五的部分: 可以看到個位數是
  
Console.WriteLine(Math.Round(1.5));  // 2
Console.WriteLine(Math.Round(2.5));  // 2
Console.WriteLine(Math.Round(3.5));  // 4
Console.WriteLine(Math.Round(4.5));  // 4
Console.WriteLine(Math.Round(5.5));  // 6
Console.WriteLine(Math.Round(6.5));  // 6
Console.WriteLine(Math.Round(7.5));  // 8
Console.WriteLine(Math.Round(8.5));  // 8
Console.WriteLine(Math.Round(9.5));  // 10
Console.WriteLine(Math.Round(10.5)); // 10


進階用法

無條件進位到小數點後兩位

上面有說到只有四捨五入可以指定到小數點後,如果需要無條件進位到小數點後兩位怎麼辦? 答:先乘以100無條件進位完再除以100即可!
補充: ToString("0.00")是因為如果結尾是0會被自動省略,所以需要讓他保留兩位小數
  
Console.WriteLine("無條件進位到小數點後兩位");
double d = 3.141 * 100d;
d = d > 0 ? Math.Ceiling(d) : Math.Floor(d);
string formatString = (d / 100d).ToString("0.00");
Console.WriteLine(formatString); // 3.15


無條件捨去到小數點後兩位

同理
  
Console.WriteLine("無條件捨去到小數點後兩位");
double d = 3.141 * 100d;
d = d > 0 ? Math.Floor(d) : Math.Ceiling(d);
string formatString = (d / 100d).ToString("0.00");
Console.WriteLine(formatString); // 3.14


留言

  1. 補充一下,Round要實現四捨五入要再追加參數MidpointRounding.AwayFromZero
    Math.Round(Num,0, MidpointRounding.AwayFromZero)

    回覆刪除

張貼留言

如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com