1. Math 类概述
Math 类是 C# 中用于执行数学运算的静态类,位于 System 命名空间中。它提供了大量的数学常量和方法,用于执行各种数学计算。
重要特性
- 静态类:不能实例化,只能通过类名访问
- 包含常量:如 π、自然对数的底 e 等
- 提供方法:用于基本数学运算、三角函数、指数和对数等
- 高性能:方法实现经过优化,执行效率高
2. 常用数学常量
Math.PI - 圆周率 π
值:3.141592653589793
用途:用于圆的周长、面积等计算
示例:
double radius = 5.0;
double area = Math.PI * radius * radius;
double circumference = 2 * Math.PI * radius;
Console.WriteLine($"圆的面积: {area}");
Console.WriteLine($"圆的周长: {circumference}");
Math.E - 自然对数的底 e
值:2.718281828459045
用途:用于指数和对数计算
示例:
double exponent = Math.Exp(1); // e^1 = e
Console.WriteLine($"e 的值: {exponent}");
Math.Tau - 2π
值:6.283185307179586
用途:表示圆的周长与半径的比值
示例:
double radius = 5.0;
double circumference = Math.Tau * radius;
Console.WriteLine($"圆的周长: {circumference}");
3. 基本数学运算方法
Math.Abs() - 绝对值
功能:返回指定数值的绝对值
示例:
int negative = -42;
double absValue = Math.Abs(negative); // 42
Console.WriteLine($"绝对值: {absValue}");
Math.Pow() - 幂运算
功能:返回指定数字的指定次幂
示例:
double square = Math.Pow(2, 2); // 2^2 = 4
double cube = Math.Pow(2, 3); // 2^3 = 8
Console.WriteLine($"平方: {square}");
Console.WriteLine($"立方: {cube}");
Math.Sqrt() - 平方根
功能:返回指定数字的平方根
示例:
double sqrt4 = Math.Sqrt(4); // 2
double sqrt9 = Math.Sqrt(9); // 3
double sqrt2 = Math.Sqrt(2); // 1.4142...
Console.WriteLine($"√4: {sqrt4}");
Console.WriteLine($"√9: {sqrt9}");
Console.WriteLine($"√2: {sqrt2}");
Math.Ceiling() - 向上取整
功能:返回大于或等于指定数字的最小整数
示例:
double value1 = 3.2;
double value2 = 3.7;
double ceiling1 = Math.Ceiling(value1); // 4
double ceiling2 = Math.Ceiling(value2); // 4
Console.WriteLine($"向上取整 3.2: {ceiling1}");
Console.WriteLine($"向上取整 3.7: {ceiling2}");
Math.Floor() - 向下取整
功能:返回小于或等于指定数字的最大整数
示例:
double value1 = 3.2;
double value2 = 3.7;
double floor1 = Math.Floor(value1); // 3
double floor2 = Math.Floor(value2); // 3
Console.WriteLine($"向下取整 3.2: {floor1}");
Console.WriteLine($"向下取整 3.7: {floor2}");
Math.Round() - 四舍五入
功能:将值舍入到最接近的整数或指定的小数位数
示例:
double value1 = 3.2;
double value2 = 3.7;
double value3 = 3.5;
double round1 = Math.Round(value1); // 3
double round2 = Math.Round(value2); // 4
double round3 = Math.Round(value3); // 4(偶数舍入规则)
Console.WriteLine($"四舍五入 3.2: {round1}");
Console.WriteLine($"四舍五入 3.7: {round2}");
Console.WriteLine($"四舍五入 3.5: {round3}");
4. 三角函数
Math.Sin() - 正弦函数
功能:返回指定角度的正弦值(参数为弧度)
示例:
double angleInRadians = Math.PI / 2; // 90度
double sinValue = Math.Sin(angleInRadians); // 1
Console.WriteLine($"sin(π/2): {sinValue}");
Math.Cos() - 余弦函数
功能:返回指定角度的余弦值(参数为弧度)
示例:
double angleInRadians = 0; // 0度
double cosValue = Math.Cos(angleInRadians); // 1
Console.WriteLine($"cos(0): {cosValue}");
Math.Tan() - 正切函数
功能:返回指定角度的正切值(参数为弧度)
示例:
double angleInRadians = Math.PI / 4; // 45度
double tanValue = Math.Tan(angleInRadians); // 1
Console.WriteLine($"tan(π/4): {tanValue}");
Math.Asin() - 反正弦函数
功能:返回正弦值为指定数字的角度(返回值为弧度)
示例:
double sinValue = 1;
double angleInRadians = Math.Asin(sinValue); // π/2
Console.WriteLine($"asin(1): {angleInRadians}");
Math.Acos() - 反余弦函数
功能:返回余弦值为指定数字的角度(返回值为弧度)
示例:
double cosValue = 0;
double angleInRadians = Math.Acos(cosValue); // π/2
Console.WriteLine($"acos(0): {angleInRadians}");
Math.Atan() - 反正切函数
功能:返回正切值为指定数字的角度(返回值为弧度)
示例:
double tanValue = 1;
double angleInRadians = Math.Atan(tanValue); // π/4
Console.WriteLine($"atan(1): {angleInRadians}");
Math.Atan2() - 反正切函数(双参数)
功能:返回正切值为 y/x 的角度,考虑象限(返回值为弧度)
示例:
double y = 1;
double x = 1;
double angleInRadians = Math.Atan2(y, x); // π/4
Console.WriteLine($"atan2(1, 1): {angleInRadians}");
5. 指数和对数函数
Math.Exp() - 指数函数
功能:返回 e 的指定次幂
示例:
double result = Math.Exp(1); // e^1 = e
Console.WriteLine($"e^1: {result}");
Math.Log() - 自然对数
功能:返回指定数字的自然对数(以 e 为底)
示例:
double result = Math.Log(Math.E); // ln(e) = 1
Console.WriteLine($"ln(e): {result}");
Math.Log10() - 常用对数
功能:返回指定数字的常用对数(以 10 为底)
示例:
double result = Math.Log10(100); // log10(100) = 2
Console.WriteLine($"log10(100): {result}");
6. 其他数学方法
Math.Max() - 最大值
功能:返回两个数中的较大值
示例:
int a = 5;
int b = 10;
int max = Math.Max(a, b); // 10
Console.WriteLine($"最大值: {max}");
Math.Min() - 最小值
功能:返回两个数中的较小值
示例:
int a = 5;
int b = 10;
int min = Math.Min(a, b); // 5
Console.WriteLine($"最小值: {min}");
Math.Sign() - 符号函数
功能:返回表示数字符号的值(-1、0 或 1)
示例:
int negative = -42;
int zero = 0;
int positive = 42;
int sign1 = Math.Sign(negative); // -1
int sign2 = Math.Sign(zero); // 0
int sign3 = Math.Sign(positive); // 1
Console.WriteLine($"-42 的符号: {sign1}");
Console.WriteLine($"0 的符号: {sign2}");
Console.WriteLine($"42 的符号: {sign3}");
Math.IEEERemainder() - 余数
功能:返回两个数字相除的余数(符合 IEEE 标准)
示例:
double remainder = Math.IEEERemainder(10, 3); // 1
Console.WriteLine($"10 ÷ 3 的余数: {remainder}");
7. 角度与弧度转换
角度转弧度
公式:弧度 = 角度 × π / 180
示例:
double degrees = 90;
double radians = degrees * Math.PI / 180; // π/2
Console.WriteLine($"90度 = {radians} 弧度");
弧度转角度
公式:角度 = 弧度 × 180 / π
示例:
double radians = Math.PI / 2;
double degrees = radians * 180 / Math.PI; // 90
Console.WriteLine($"π/2 弧度 = {degrees} 度");
8. 实用示例
示例1:计算两点之间的距离
double Distance(double x1, double y1, double x2, double y2)
{
double dx = x2 - x1;
double dy = y2 - y1;
return Math.Sqrt(dx * dx + dy * dy);
}
// 使用示例
double dist = Distance(0, 0, 3, 4); // 5
Console.WriteLine($"距离: {dist}");
示例2:计算圆的面积和周长
void CalculateCircle(double radius)
{
double area = Math.PI * radius * radius;
double circumference = 2 * Math.PI * radius;
Console.WriteLine($"半径: {radius}");
Console.WriteLine($"面积: {area}");
Console.WriteLine($"周长: {circumference}");
}
// 使用示例
CalculateCircle(5); // 半径为5的圆
示例3:生成指定范围内的随机数
double RandomInRange(double min, double max, Random random)
{
return min + random.NextDouble() * (max - min);
}
// 使用示例
Random rand = new Random();
double value = RandomInRange(10, 20, rand);
Console.WriteLine($"随机数: {value}");
示例4:计算三角形的面积(海伦公式)
double TriangleArea(double a, double b, double c)
{
double s = (a + b + c) / 2;
return Math.Sqrt(s * (s - a) * (s - b) * (s - c));
}
// 使用示例
double area = TriangleArea(3, 4, 5); // 6
Console.WriteLine($"三角形面积: {area}");
9. 性能考量
注意:Math 类方法的性能
Math 类的方法虽然经过优化,但在性能敏感的场景中仍需注意:
- 避免在循环中重复计算相同的数学常量
- 对于简单的数学运算,直接计算可能比调用 Math 方法更快
- 三角函数和对数函数的计算开销较大,应避免频繁调用
性能优化建议
- 将重复使用的计算结果缓存起来
- 使用适当的数据类型(如 float vs double)
- 对于简单的乘方运算,考虑直接相乘(如 x*x 比 Math.Pow(x, 2) 快)
- 在需要高精度计算时使用 Math 类方法
10. 总结
通过本教程,您应该已经掌握了 C# Math 类的核心方法和常量:
- 理解了 Math 类的静态特性和常用常量
- 掌握了基本数学运算方法(绝对值、幂运算、平方根等)
- 学会了三角函数、指数和对数函数的使用
- 了解了角度与弧度的转换方法
- 掌握了实际应用中的数学计算技巧
Math 类是 C# 中处理数学计算的强大工具,熟练掌握其方法将大大提高您的开发效率和代码质量。