主要方法介紹:
無條件進位的範例輸出:
無條件捨去的範例輸出:
四捨五入到小數點後第三位:
接下來是五的部分: 可以看到個位數是
補充: ToString("0.00")是因為如果結尾是0會被自動省略,所以需要讓他保留兩位小數
- Math.Floor 方法:傳回小於或等於指定數字的最大整數值
- Math.Ceiling 方法:傳回大於或等於指定數字的最小整數值
- 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
補充一下,Round要實現四捨五入要再追加參數MidpointRounding.AwayFromZero
回覆刪除Math.Round(Num,0, MidpointRounding.AwayFromZero)