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

四捨五入:

其實應該是四捨六入,五的話看進位的是奇數還偶數,奇數進位,偶數不進位
直接看範例:
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

四捨五入到小數點後第三位:

Console.WriteLine(Math.Round(3.1415, 3)); // 3.142

進階用法:

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

上面有說到只有四捨五入可以指定到小數點後,如果需要無條件進位到小數點後兩位怎麼辦?
答:先乘以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

作者Ruyut,希望餐餐有肉吃的小小工程師

留言

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

    回覆刪除

張貼留言

如果有任何問題或建議,都歡迎留言或來信: a@ruyut.com