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

c#,math,常用,数学,运算 · 浏览次数 : 716

小编点评

**一、动态库 System.Math.dll引入动态库** ```csharp using System; using System.Math; public class Example { static void Main() { // 导入动态库 Console.WriteLine(" 导入动态库 System.Math.dll "); Math.Round(74.5, MidpointRounding.AwayFromZero); // 保留到个位 // 进一法 Console.WriteLine(" 进一法 Math.ceil() 和舍弃法 Math.Floor()double[] values = { 7.03, 7.64, 0.12, -0.12, -7.1, -7.6 };"); foreach (double value in values) { Console.WriteLine($"{0,7} {1,16} {2,14}\", value, Math.Ceiling(value), Math.Floor(value)); } } } ``` **二、取随机数** ```csharp using System; using System.Math; public class Example { static void Main() { // 使用 Random 类包含在命名空间 System 中 Random random = new Random(); // 返回非负int型随机数 Console.WriteLine(" 输入值 Ceiling 结果 Floor 结果\\"); foreach (double value in { 7.03, 7.64, 0.12, -0.12, -7.1, -7.6 }) { Console.WriteLine($\"Abs({value}) = {Math.Abs(value)}\"); } } } ``` **三、取较大值和最小值** ```csharp using System; using System.Math; public class Example { static void Main() { // 比较两个数字的大小 Console.WriteLine(" max(0,1) = 1;Math.Min(0,1) = 0;"); } } ``` **四、幂次方** ```csharp using System; using System.Math; public class Example { static void Main() { // 算 2 的 3 次方 Console.WriteLine("Math.Pow(2, 3) = 8;"); // 算 16 的平方根 Console.WriteLine("Math.Sqrt(16) = 4;"); } } ``` **五、其他** ```csharp // 其他功能详见官方文档: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

与C# Math 中的常用的数学运算相似的内容:

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

Math 类和 Random 类简介。有其他的用法欢迎评论区补充。

UnityShader数学基础篇

Mathf Mathf和Math 1、Math是C#中封装好的用于数学计算的工具类,位于System命名空间中。 2、Mathf是Unity中封装好的用于数学计算的工具结构体,位于UnityEngine命名空间中。 Mathf中的常用方法 1.π - PI print(Mathf.PI); 2.取绝

C# 开发技巧 轻松监控方法执行耗时

前言 MethodTimer.Fody 是一个功能强大的库,可以用于测量 .NET 应用程序中的方法的执行时间。允许你在不修改代码的情况下,自动地测量和记录方法的执行时间。 这个工具是基于.NET的 weaving 技术,通过修改IL(Intermediate Language,中间语言)代码来插入

C#开源、简单易用的Dapper扩展类库 - Dommel

前言 今天大姚给大家分享一个C#开源(MIT License)、免费、简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel。 项目特性 Dommel 使用 IDbConnection 接口上的扩展方法为 CRUD 操作提供了便捷的 API。 Dom

C语言指针易混淆知识点总结

指针 定义 指针是一个变量,存储另一个变量的内存地址,它允许直接访问和操作内存中的数据,使得程序能够以更灵活和高效的方式处理数据和内存。 获取变量地址:使用取地址符 &。 访问地址上的数据:使用解引用符 *。 例子1 指针是存储另一个变量地址的变量。通过使用取地址符 & 和解引用符 *,我们可以灵活

C++如何在main函数开始之前(或结束之后)执行一段逻辑?

1. 问题 2. 考察的要点 3. 解决策略 3.1. 方案一:使用GCC的拓展功能 3.2. 方案二:使用全局变量 3.3. 方案三:atexit 4. Demo测试 4.1. 测试代码 4.2. 执行结果 5. 程序异常退出场景 5.1. 存在的问题 5.2. 解决方案 5.2.1. 原理 5.

C#/.NET这些实用的编程技巧你都会了吗?

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。 GitHub开源地址:https:/

C# 使用模式匹配的好处,因为好用所以推荐~

类型检查和转换:当你需要检查对象是否为特定类型,并且希望在同一时间内将其转换为那个类型时,模式匹配提供了一种更简洁的方式来完成这一任务,避免了使用传统的as和is操作符后还需要进行额外的null检查。 复杂条件逻辑:在处理复杂的条件逻辑时,特别是涉及到多个条件和类型的情况下,使用模式匹配可以使代码更

【C++】使用ort推理yolov10

【C++】使用ort推理yolov10 前言:由于笔者是编导专业,想玩玩yolo模型,搜来搜去全是python,所以在学会之后写一篇文章帮助和笔者同样情况的人 环境 Windows 10 C++17 onnxruntime18.1(DML版本) opencv4.9 visual studio2022

C++使用gnuplot-cpp库绘制图像

最近想要对一些时变的变量进行可视化,搜索来搜索去选择了使用gnuplot这个工具。 sudo apt-get install gnuplot sudo apt-get install gnuplot-x11 # 使其支持linux终端 这样就安装完gnuplot了。接着可以在命令行中键入gnuplo