• C#的Math 类使用说明


    一:Math 类简单说明

       为三角函数、对数函数和其他通用数学函数提供常数和静态方法。

    二:Math 类的字段

    字段字段说明
    E表示自然对数的底,它由常数 e 指定。
    PI表示圆的周长与其直径的比值,由常数 π 指定。

    1: Math 类的字段使用举例

    double x = 2 * 180 / Math.PI;
    double y =  Math.Round(x, 2);//Round(Double, Int32)
    
    Console.WriteLine("{0} , {1}",x,y);
    
    • 1
    • 2
    • 3
    • 4

    运行结果:

    114.591559026165 , 114.59

    三:Math 类的常用方法

    方法方法说明
    Abs(Decimal)返回 Decimal 数字的绝对值。
    Acos(Double)返回为指定数字的余弦值角度
    Asin(Double)返回为指定数字的正弦值角度
    Atan(Double)返回为指定数字的正切值角度
    Atan2(Double, Double)返回两个指定数字的商的正切值角度
    BigMul(Int32, Int32)生成两个 32 位数字的完整乘积,就是两个数相乘。
    Ceiling(Decimal)返回大于或等于指定的十进制数的最小整数值
    Floor(Decimal)返回小于或等于指定小数的最大整数值
    Cos(Double)返回指定角度的余弦值
    Cosh(Double)返回指定角度的双曲余弦值
    Sin(Double)返回指定角度的正弦值
    Sinh(Double)返回指定角度的双曲正弦值
    DivRem(Int32, Int32, Int32)计算两个 32 位有符号整数的商,并通过输出参数返回余数。
    Exp(Double)返回 e 的指定次幂。
    Ceiling(Decimal)返回大于或等于指定的十进制数的最小整数值。
    IEEERemainder(Double, Double)返回一指定数字被另一指定数字相除的余数。
    Log(Double)返回指定数字的自然对数(底为 e)。
    Log(Double, Double)返回指定数字在使用指定底时的对数。
    Log10(Double)返回指定数字以 10 为底的对数。
    Max(Decimal, Decimal)返回两个十进制数中较大的一个。
    Min(Decimal, Decimal)返回两个十进制数中较小的一个。
    Pow(Double, Double)返回指定数字的指定次幂。
    Round(Decimal)将双精度浮点值舍入到指定数量的小数位,并将中点值舍入到最接近的偶数。
    Round(Double, Int32)将小数值舍入到最接近的整数值,并将中点值舍入到最接近的偶数。
    Sign(Decimal)返回表示十进制数符号的整数。
    Sqrt(Double)返回指定数字的平方根。
    Tan(Double)返回指定角度的正切值。

    1: Math.Abs() 方法的使用

    重载重载说明
    Abs(Decimal)返回 Decimal 数字的绝对值。
    Abs(Double)返回双精度浮点数字的绝对值。
    Abs(Single)回单精度浮点数字的绝对值。
    Abs(Int64)返回 64 位有符号整数的绝对值。
    Abs(Int32)返回 32 位有符号整数的绝对值。
    Abs(Int16)返回 16 位有符号整数的绝对值。
    Abs(SByte)返回 8 位有符号整数的绝对值。

    使用举例:

    decimal[] decimals = { Decimal.MaxValue, 13.15M, -19.69M, Decimal.MinValue };
    foreach (decimal value in decimals)
    {
        //WriteLine($"{sth}");//这种情况下编译器会把sth当做一个表达式,计算出这个表达式的值,然后输出。
        Console.WriteLine($"Abs({value}) = {Math.Abs(value)}");
    }
    Console.WriteLine();
    
    double[] doubles = { Double.MaxValue, 16.354e-17, 10.28, -15.058e18, Double.MinValue };
    foreach (double value in doubles)
    {
        Console.WriteLine($"Abs({value}) = {Math.Abs(value)}");
    }
    Console.WriteLine();
    
    short[] values = { Int16.MaxValue, 15989, -929, Int16.MinValue };
    foreach (short value in values)
    {
        try
        {
            Console.WriteLine($"Abs({value}) = {Math.Abs(value)}");
        }
        catch (OverflowException)
        {
            Console.WriteLine("Unable to calculate the absolute value of {0}.",value);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    运行结果:

    Abs(79228162514264337593543950335) = 79228162514264337593543950335
    Abs(13.15) = 13.15
    Abs(-19.69) = 19.69

    Abs(-79228162514264337593543950335) = 79228162514264337593543950335
    Abs(1.79769313486232E+308) = 1.79769313486232E+308
    Abs(1.6354E-16) = 1.6354E-16
    Abs(10.28) = 10.28
    Abs(-1.5058E+19) = 1.5058E+19
    Abs(-1.79769313486232E+308) = 1.79769313486232E+308

    Abs(32767) = 32767
    Abs(15989) = 15989
    Abs(-929) = 929
    Unable to calculate the absolute value of -32768.

    2: Math.Asin(Double) 方法的使用

    2.1:语法

    public static double Asin (double d);
    
    • 1

    2.2:参数说明

    d:表示一个正弦值的数字,d 必须大于或等于 -1 但小于或等于 1。
    Double:返回角度 θ,以弧度为单位,满足 -π/2 ≤ θ ≤ π/2。 如果 d < -1 或 d > 1 或 d 等于 NaN,则为 NaN。

    2.3:使用举例

    double val1 = -0.0;
    double val2 = 1.1;
    double val3 = 0.9;
    double val4 = Double.NaN;
    
    Console.WriteLine("Return value of {0} : {1}", val1, Math.Asin(val1));
    Console.WriteLine("Return value of {0} : {1}", val2, Math.Asin(val2));
    Console.WriteLine("Return value of {0} : {1}", val3, Math.Asin(val3));
    Console.WriteLine("Return value of {0} : {1}", val4, Math.Asin(val4));
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.4:运行结果:

    Return value of 0 : 0
    Return value of 1.1 : 非数字
    Return value of 0.9 : 1.11976951499863
    Return value of 非数字 : 非数字

    3: Math.Atan(Double) 方法的使用

    3.1:语法

    public static double Atan (double d);
    
    • 1

    3.2:参数说明

    d:表示正切值的数字。。
    Double:返回角度 θ,以弧度为单位,满足 -π/2 ≤ θ ≤ π/2。

    4: Math.Atan2(Double, Double) 方法的使用

    4.1:语法

    public static double Atan2 (double y, double x);
    
    • 1

    4.2:参数说明

    x,y:点的 x和y 坐标。
    Double:返回角度 θ,以弧度为单位,满足 -π ≤ θ ≤ π,且 tan(θ) = y / x,其中 (x, y) 是笛卡儿平面中的点。

    4.3:使用举例

    //  计算45度的切线。
    angle = 45;
    radians = angle * (Math.PI / 180);
    result = Math.Tan(radians);
    Console.WriteLine("计算45度的正切值是: {0}.", result);
    
    // 计算上一个切线的反正切.
    radians = Math.Atan(result);
    angle = radians * (180 / Math.PI);
    Console.WriteLine("上一个切线的反正切角度是:{0}", angle);
    
    radians = Math.Atan2(y, x);
    angle = radians * (180 / Math.PI);
    
    Console.WriteLine(radians);
    Console.WriteLine(angle);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    4.4:运行结果:

    计算45度的正切值是: 1.
    上一个切线的反正切角度是:45
    0.785398163397448
    45

    5: Math.BigMul(Int32, Int32) 方法的使用

    5.1:语法

    public static long BigMul (int a, int b);
    
    • 1

    5.2:使用举例

    int int1 = 99;
    int int2 = 100;
    long longResult;
    
    longResult = Math.BigMul(int1, int2);
    Console.WriteLine("{0} * {1} = {2}", int1, int2, longResult);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5.3:运行结果:

    99 * 100 = 9900

    6: Math.Ceiling()和Math.Floor() 方法的使用

    6.1:语法

    public static decimal Ceiling (decimal d); //这种舍入有时称为,向正无穷大舍入。
    public static decimal Floor (decimal d);//这种舍入有时称为,向负无穷大舍入
    
    • 1
    • 2

    6.2:重载

    重载重载说明
    Ceiling(Decimal)返回大于或等于指定的十进制数的最小整数值。
    Ceiling(Double)返回大于或等于指定的双精度浮点数的最小整数值。
    Floor(Double)返回小于或等于指定双精度浮点数的最大整数值。
    Floor(Decimal)返回小于或等于指定小数的最大整数值。

    6.3:使用举例

    decimal[] values = { 9.29m, 10.28m, 89.79m, -21.29m, -7.1m, -7.6m };
    Console.WriteLine("  Value          Ceiling          Floor\n");
    
    foreach (decimal value in values)
    {
        Console.WriteLine("{0,7} {1,16} {2,14}", value, Math.Ceiling(value), Math.Floor(value));
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    6.4:运行结果:

    Value   Ceiling   Floor
    9.29    10    9
    10.28    11  10
    89.79   90   89
    -21.29   -21   -22
    -7.1    -7    -8
    -7.6    -7    -8

    7: Math.Exp(Double)和Math.Log () 方法的使用

    7.1:语法

    public static double Exp (double d);
    public static double Log (double d);
    
    • 1
    • 2

    7.2:重载

    重载重载说明
    Log(Double, Double)返回指定数字在使用指定底时的对数。
    Log(Double)返回指定数字的自然对数(底为 e)。

    7.3:使用举例

    int a = 2;
    double b = Math.Exp(a);
    double c = Math.Log(b);
    
    Console.WriteLine( "Math.Exp = {0},Math.Log = {1}",b,c);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7.4:运行结果:

    Math.Exp = 7.38905609893065,Math.Log = 2

    8: Math.Pow(Double, Double) 方法的使用

    8.1:语法

    public static double Pow (double x, double y);
    
    • 1

    8.2:使用举例

    int a = 2;
    int b = 3;
    double c = Math.Pow(a,b);
    
    Console.WriteLine("Math.Pow(a,b) = {0}", c);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    8.3:运行结果:

    Math.Pow(a,b) = 8

    9:Math.Round()方法的使用

    9.1:重载

    重载重载说明
    Round(Double, Int32, MidpointRounding)使用指定的舍入约定将双精度浮点值,舍入为指定的小数位数。
    Round(Decimal, Int32, MidpointRounding)使用指定的舍入约定将十进制值,舍入为指定的小数位数。
    Round(Double, MidpointRounding)使用指定的舍入约定将双精度浮点值,舍入为整数。
    Round(Decimal, MidpointRounding)使用指定的舍入约定将十进制值,舍入为整数。
    Round(Double, Int32)将双精度浮点值舍入到指定数量的小数位,并将中点值舍入到最接近的偶数。
    Round(Decimal, Int32)将小数值舍入到指定数量的小数位,并将中点值舍入到最接近的偶数。
    Round(Double)将双精度浮点值舍入到最接近的整数值,并将中点值舍入到最接近的偶数。
    Round(Decimal)将小数值舍入到最接近的整数值,并将中点值舍入到最接近的偶数。

    9.2:中点值和舍入约定
      舍入涉及到将具有指定精度的数值,转换为精度较低的值。 例如,可以使用 Round(Double) 方法将3.4 的值舍入到3.0,并使用 Round(Double, Int32) 方法将3.579 值舍入到3.58。

      Round方法支持两个用于处理中点值的舍入约定:
    1)远离零的舍入:中值舍入到下一个数字,而不是零。 例如,3.75 舍入为3.8,3.85 舍入到3.9,-3.75 舍入到-3.8,-3.85 舍入到-3.9。 这种形式的舍入由 MidpointRounding.AwayFromZero 枚举成员表示。
    2)舍入到最接近的偶数或按下舍入:中值舍入为最接近的偶数。 例如,3.75 和3.85 舍入为3.8,-3.75 和-3.85 舍入到-3.8。 这种形式的舍入由 MidpointRounding.ToEven 枚举成员表示。

    9.3:使用举例

    decimal[] values = { 1.15m, 1.25m, 1.35m, 1.45m, 1.55m, 1.65m };
    decimal sum = 0;
    
    // 计算真实平均值.
    foreach (var value in values)
        sum += value;
    Console.WriteLine("真实平均值:     {0:N2}", sum / values.Length);
    
    // 用四舍五入的方式计算平均值.
    sum = 0;
    foreach (var value in values)
    {
        sum += Math.Round(value, 1, MidpointRounding.AwayFromZero);//Round(Decimal, Int32, MidpointRounding) 
    }
        
    Console.WriteLine("AwayFromZero:  {0:N2}", sum / values.Length);
    
    //  四舍五入为最接近的偶数的计算平均值.
    sum = 0;
    foreach (var value in values)
    {
        sum += Math.Round(value, 1, MidpointRounding.ToEven);
    }
        
    Console.WriteLine("ToEven:        {0:N2}", sum / values.Length);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    9.4:运行结果:

    真实平均值:  1.40
    AwayFromZero:  1.45
    ToEven:   1.40
  • 相关阅读:
    第1关:构造函数与析构函数的实现
    YUV转RGB888
    ch4 报错修正 & Sophus使用
    14.linux线程
    (数位dp) 算法竞赛入门到进阶 书本题集
    智能毫米波雷达人体感应器,实时检测静止存在,智能化控制方案
    二级导航栏
    Echarts 社区分享
    基于C/C++的UG二次开发流程
    el-table 实现表、表格行、表格列合并
  • 原文地址:https://blog.csdn.net/u010033786/article/details/126786353