• C# Math 中的常用的数学运算



    〇、动态库 System.Math.dll

    引入动态库 using System.Math;

      Math 为通用数学函数、对数函数、三角函数等提供常数和静态方法,使用起来非常方便,下边简单列一下常用的几种。

    一、舍弃小数位处理

    1. 四舍五入 Math.Round()

    Math.Round(74.5, MidpointRounding.AwayFromZero) = 75; // 保留到个位
    Math.Round(-74.5, MidpointRounding.AwayFromZero) = -75; // 目标值为负数时,四舍五入和正整数相同

    单纯使用 Math.Round(4.5) 得出的值为 4,因为 Round 默认是采用 Banker's rounding(银行家算法),即:四舍六入五取偶。事实上这也是 IEEE 的规范,因此所有符合 IEEE 标准的语言都应该采用这样的算法。

      所谓取偶,就是看上一位:如果是偶数,小数位为 5 就舍弃;若为奇数,小数位为 5 就进 1。因此,若写法:Math.Round(74.5)=74

    Math.Round(7.015, 2, MidpointRounding.AwayFromZero) = 7.02; // 保留多位小数
    Math.Round(-7.015, 2, MidpointRounding.AwayFromZero) = -7.02;

      若需要保留多位小数,也是同样需要带枚举类型。

    // Round 共有八个重载,输出类型由输入类型确定
    Round(Decimal)
    Round(Double)
    Round(Decimal, Int32)
    Round(Decimal, MidpointRounding)
    Round(Double, Int32)
    Round(Double, MidpointRounding)
    Round(Decimal, Int32, MidpointRounding)
    Round(Double, Int32, MidpointRounding)

      关于 MidpointRounding 官网链接

    2. 进一法 Math.ceil() 和舍弃法 Math.Floor()

    double[] values = { 7.03, 7.64, 0.12, -0.12, -7.1, -7.6 };
    Console.WriteLine(" 输入值 Ceiling 结果 Floor 结果\n");
    foreach (double value in values)
    Console.WriteLine("{0,7} {1,16} {2,14}", value, Math.Ceiling(value), Math.Floor(value));
    // 输入值 Ceiling 结果 Floor 结果
    // 7.03 8 7
    // 7.64 8 7
    // 0.12 1 0
    // -0.12 -0 -1
    // -7.1 -7 -8
    // -7.6 -7 -8

     二、取随机数 Random()

     在新版的 C# 中,Random 类包含在命名空间 System 中,因此基本上随时随地都可以直接实例化并取用,十分方便。

      下面用实例简单介绍下几个重载的用法,更加详细的用法推荐 Random 官方文档

    Random random = new Random();
    // Random.Next() // 返回非负int型随机数
    int randomvalue = random.Next(); // 0 <= 返回值 <2,147,483,647 的整数
    // Random.Next(Int) // 返回一个小于所指定最大值的非负随机整数
    int randomvalue1 = random.Next(10); // 0 <= 返回值 < 10 的整数
    // Random.Next(Int,Int) // 返回一个指定范围内的随机整数数,例如(-100,0)返回负数
    int randomvalue2 = random.Next(10,20); // 10 <= 返回值 < 20 的整数
    int randomvalue2 = random.Next(-10,0); // -10 <= 返回值 < 0 的整数
    // Random.NextDouble() // 返回一个介于 0 到 1 之间的随机数 0.70865696329095262
    double randomvalue2 = random.NextDouble(); // 例如:0.70865696329095262、0.021905906508632892

    三、绝对值 Math.Abs()

    求绝对值的方法,只有仅一个参数的重载,即入参不同,但出参和入参类型相同,很简单不再赘述。Math.Abs() 官方文档

    decimal[] decimals = { Decimal.MaxValue, 12.45M, 0M, -19.69M,
    Decimal.MinValue };
    foreach (decimal value in decimals)
    Console.WriteLine($"Abs({value}) = {Math.Abs(value)}");
    //Abs(79228162514264337593543950335) = 79228162514264337593543950335
    //Abs(12.45) = 12.45
    //Abs(0) = 0
    //Abs(-19.69) = 19.69
    //Abs(-79228162514264337593543950335) = 79228162514264337593543950335

     四、取较大值 Math.max() 与取最小值 Math.min()

     较常用的写法就是比较两个数字的大小。它们还支持比较多种类型,详见 Math.Max() 官网 

    Math.Max(0,1) = 1;
    Math.Min(0,1) = 0;

     五、幂次方 Math.Pow() 与求平方根 Math.sqrt()

    简单示例如下:

    Math.Pow(2, 3) = 8; // 2 的 3 次方
    Math.Sqrt(16) = 4// 16 的平方根为 4,即 4*4 = 16

     六、其他

    1、取余(运算符:%)

    当结果为 0 时,代表可乘除。

    // 取余
    for (int ii = 1; ii <= 10; ii++)
    {
    if (ii % 3 == 0)
    {
    Console.WriteLine(ii); // 输出依次为:3、6、9
    }
    }

    2、取整(运算符:/)

    for (int ii = 1; ii <= 10; ii++)
    {
    if (ii / 3 == 0)
    {
    Console.WriteLine($"ii / 3 == 0:{ii}"); // 依次输出:1、2
    }
    if (ii / 3 == 1)
    {
    Console.WriteLine($"ii / 3 == 1:{ii}"); // 依次输出:3、4、5
    }
    if (ii / 3 == 2)
    {
    Console.WriteLine($"ii / 3 == 2:{ii}"); // 依次输出:6、7、8
    }
    if (ii / 3 == 3)
    {
    Console.WriteLine($"ii / 3 == 3:{ii}"); // 依次输出:9、10
    }
    }

    注:其他功能详见官方文档:Math

  • 相关阅读:
    python数据类型之间的互相转换
    java计算机毕业设计商店管理系统源程序+mysql+系统+lw文档+远程调试
    【算法思想】排序
    UnityLeapMotion流程记录
    3.ORM实践
    【audio】alsa pcm音频路径
    JS学习总结
    高等教育心理学:学生的认知发展
    ldap简单理解
    SpringBoot - 如何实现接口幂等性?
  • 原文地址:https://www.cnblogs.com/czzj/p/16892863.html