當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C# Math.Round()函數用法及代碼示例


在C#中,Math.Round()是Math類方法,用於將值四舍五入到最接近的整數或小數位數。此方法還有另一個重載,您可以使用該重載指定返回值中小數點後的位數。它返回數字的最接近值,其精度等於傳遞的第二個參數。如果要舍入的值恰好介於偶數和奇數之間,則返回偶數。 Math.Round適用IEEE標準754,第4節。

可以通過更改傳遞的參數的數量和類型來重載此方法。 Math.Round()方法的重載列表中總共有8種方法,其中4種已經在C#中進行了討論。 Math.Round()方法|設置-1。



Math.Round(Double, Int32, MidpointRounding)

此方法用於將雙精度浮點值四舍五入為指定數量的小數位數。參數指定如果值在兩個數字之間的中間值時如何舍入。

用法:

public static double Round (double val, int digits, MidpointRounding mode);

參數:

  • val:這是必需的雙精度浮點數,將對其進行舍入,並且此參數的類型為System.Double。
  • digits:它是返回值中的小數位數,並且此參數的類型為System.Int32。
  • mode:指定如何舍入val(如果它位於其他兩個數字之間的中間)並用作MidpointRounding。

返回類型:此方法返回最接近val的數字,該數字的小數位數等於位。如果val的小數位數少於位數,則val保持不變。此方法的返回類型為System.Double。

異常:

  • ArgumentOutOfRangeException:如果數字小於0或大於15。
  • ArgumentException:如果模式不是MidpointRounding的有效值。

例:

// C# program to demonstrate the  
// Math.Round(Double, Int32,  
// MidpointRounding) method 
using System; 
   
class Geeks  
{ 
      
    // Main Method 
    public static void Main()  
    { 
        // The 4 values are store in an double 
        // type array name 'val' 
        double[] val = {4.125, 4.135, 4.165, 4.175}; 
          
   
        Console.WriteLine("Rounded values are:");  
          
        // 'foreach' loop iterates through 
        // each item from the array 'values'  
        // and storing the items in a new  
        // variable 'val'  
        foreach(double value in val)  
          
            // '{0}' specify the variable 'val' which is 
            // in 'foreach' loop and '{1}' specify the  
            // rounded value, here '2' defines the number 
            // of digit after point, e.g. 4.135 == 4.14, 
            // after '4.' there is 2 digits'.14'  
            // and here '.ToEven' select the nearest even 
            // number e.g 4.125 == 4.12, here nearest even 
            // number is '12', 
            Console.WriteLine("{0} == {1}", value, Math.Round(value, 2,  
                                             MidpointRounding.ToEven)); 
              
    } 
}
輸出:

Rounded values are:
4.125 == 4.12
4.135 == 4.14
4.165 == 4.16
4.175 == 4.18

注意:在某些情況下,由於精度的損失,此方法似乎無法舍入mode參數指定的中點值,這可能是由於將十進製值表示為浮點數或對浮點值執行算術運算而導致的。在上麵的示例中對此進行了說明,其中4.135舍入為4.13而不是4.14。發生這種情況是因為該方法在內部將val乘以10digits在這種情況下,乘法運算會損失精度。

Math.Round(Double, MidpointRounding)

此方法用於將雙精度浮點值舍入到最接近的整數。參數指定如果值在兩個數字之間的中間值時如何舍入。

用法:

public static double Round (double val, MidpointRounding mode);

參數:

  • val:這是必需的雙精度浮點數,將對其進行舍入,並且此參數的類型為System.Double。
  • mode:指定如何舍入val(如果它位於其他兩個數字之間的中間)並用作MidpointRounding。

返回類型:此方法返回整數最近值。如果val位於兩個整數之間,其中一個為偶數,另一個為奇數,則mode確定返回兩個整數中的哪一個。此方法的返回類型為System.Double。

異常:如果模式不是MidpointRounding的有效值,則此方法提供ArgumentException。

例:

// C# program to demonstrate the  
// Math.Round(Double, MidpointRounding) method 
using System; 
   
class Geeks  
{ 
      
    // Main Method 
    public static void Main()  
    { 
          
        //'val' is double type variable  
        // which holds the value 4.1 
        double val = 4.1; 
          
        Console.WriteLine("Inside Loop:\n"); 
          
        //'for loop', it execute the next 
        // output for 8 times 
        for (int i = 0; i <= 8; i++)  
        { 
              
            // '{0}' specify the variable 'val' and  
            // '{1}' specify the rounded value 
            Console.WriteLine("{0} = {1}", val, Math.Round(val,  
                               MidpointRounding.AwayFromZero)); 
              
            // increment 'val' by '0.1'                 
            val += 0.1;  
        } 
          
        // a new value is assigned 
        // to variable 'val' 
        val = 4.5;  
          
        // prints a new line 
        Console.WriteLine();  
          
        //'{0}'specify the variable 'val' in which a new 
        // value 4.5 is assigned and '{1}' specify the  
        // new rounded value 
        Console.WriteLine("Outside Loop:{0} = {1}", val,  
          Math.Round(val, MidpointRounding.AwayFromZero)); 
            
    } 
}
輸出:

Inside Loop:

4.1 = 4
4.2 = 4
4.3 = 4
4.4 = 4
4.5 = 4
4.6 = 5
4.7 = 5
4.8 = 5
4.9 = 5

Outside Loop:4.5 = 5

注意:在某些情況下,由於精度損失,該方法可能無法將中點值舍入到最接近的偶數整數,這可能是由於將十進製值表示為浮點數或對浮點值執行算術運算而導致的。在上麵的示例中,由於浮點值0.1沒有有限的二進製表示形式,因此第一次調用值為4.5的方法將返回4而不是5。

Math.Round(Decimal, Int32, MidpointRounding)

此方法用於將十進製值舍入為指定數量的小數位數。參數指定如果值在兩個數字之間的中間值時如何舍入。

用法:

public static decimal Round (decimal val, int num, MidpointRounding mode);

參數:

  • val:這是要四舍五入的System.Decimal類型的必需十進製數。 num:指定返回值的小數位數,此參數的類型為System.Int32。模式:提供有關在兩個其他數字之間居中時如何舍入val的規範。

返回類型:最接近val的數字,其中包含與num相等的小數位數。如果val的小數位數少於小數位數,則val保持不變。

異常:

  • ArgumentOutOfRangeException:如果num小於0或大於28。
  • ArgumentException:如果模式不是MidpointRounding的有效值。
  • OverflowException:如果結果超出小數的範圍。

例:

// C# program to demonstrate the  
// Math.Round(Decimal, Int32,  
// MidpointRounding) method 
using System; 
  
class Geeks  
{ 
      
    // Main Method 
    public static void Main()  
    { 
  
        // The 6 values are store in an  
        // double type array name val, 
        double[] val = {2.275, 2.375, 2.455,  
                        3.525, 3.635, 3.465 }; 
                          
        // prints 'Rounded values:' 
        Console.WriteLine("Rounded Values:");  
  
        //'foreach' loop iterates through each item 
        // from the array 'val' and storing the items 
        // in a new variable 'value' 
        foreach(double value in val)  
  
            // '{0}' specify the variable 'value'and  
            // '{1}' specify the rounded value, 
            Console.WriteLine("{0} == {1}", value, Math.Round(value,  
                                        2, MidpointRounding.ToEven)); 
          
    } 
}
輸出:
Rounded Values:
2.275 == 2.28
2.375 == 2.38
2.455 == 2.46
3.525 == 3.52
3.635 == 3.64
3.465 == 3.46

Math.Round(Decimal, MidpointRounding)

此方法用於將十進製值舍入到最接近的整數。參數指定如果值在兩個數字之間的中間值時如何舍入。



用法:

public static decimal Round (decimal val, MidpointRounding mode);

參數:

  • val:這是要四舍五入的System.Decimal類型的必需十進製數。模式:提供有關在兩個其他數字之間居中時如何舍入val的規範。

返回類型:它返回最接近的整數val。如果val位於兩個數字的中間,其中一個為偶數,另一個為奇數,則mode確定返回兩個中的哪個。

異常:

  • ArgumentException:如果模式不是MidpointRounding的有效值。
  • OverflowException:如果結果超出小數的範圍。

例:

// C# program to demonstrate the  
// Math.Round(Decimal, MidpointRounding) method 
using System; 
  
class Geeks  
{ 
      
    // Main Method 
    public static void Main()  
    { 
          
        // The 6 values are store in a  
        // double type array name val 
        double[] val = {2.275, 2.375, 2.455,  
                       3.525, 3.635, 3.465 }; 
          
        // prints 'Rounded values:' 
        Console.WriteLine("Rounded values:");  
  
        //'foreach' loop iterates through each item  
        // from the array 'val' and storing the items  
        // in a new variable 'value'  
        foreach(double value in val)  
  
            // '{0}' specify the variable 'value' and 
            // '{1}' specify the rounded value 
            Console.WriteLine("{0} == {1}", value, Math.Round(value,  
                                           MidpointRounding.ToEven)); 
    } 
}
輸出:
Rounded values:
2.275 == 2
2.375 == 2
2.455 == 2
3.525 == 4
3.635 == 4
3.465 == 3

參考: https://docs.microsoft.com/en-us/dotnet/api/system.math.round?view=netframework-4.7.2




相關用法


注:本文由純淨天空篩選整理自SoumikMondal大神的英文原創作品 C# | Math.Round() Method | Set – 2。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。