1. 简介

本篇文章将介绍 Java 中的 Math 类,它提供了大量静态方法,用于执行常见的数值计算操作,比如指数、对数、三角函数等。

2. 基础数学函数

我们先来看一些基础的数学函数,包括绝对值、平方根、最大值、最小值等。

2.1. abs()

abs() 方法用于获取一个数的绝对值:

Math.abs(-5); // 返回 5

该方法支持 intlongfloatdouble 类型的参数。

2.2. pow()

用于计算第一个参数的第二个参数次幂:

Math.pow(5, 2); // 返回 25

更详细的用法可参考:Java Math.pow 详解

2.3. sqrt()

返回一个 double 类型数的正平方根:

Math.sqrt(25); // 返回 5

如果参数为负数或 NaN,结果也为 NaN

2.4. cbrt()

返回一个 double 类型数的立方根:

Math.cbrt(125); // 返回 5

2.5. max()

返回两个值中的较大者:

Math.max(5, 10); // 返回 10

支持 intlongfloatdouble 类型。

2.6. min()

返回两个值中的较小者:

Math.min(5, 10); // 返回 5

2.7. random()

返回一个 [0.0, 1.0) 区间内的伪随机 double 值:

double random = Math.random();

⚠️ 注意:该方法首次调用时会创建一个 java.util.Random 实例,后续调用都复用该实例。方法是同步的,线程安全。

更多生成随机数的方法可参考:Java 生成随机数

2.8. signum()

用于获取一个数的符号:

Math.signum(-5); // 返回 -1.0
  • 正数返回 1.0
  • 负数返回 -1.0
  • 零则返回其本身(包括正负零)

支持 floatdouble

2.9. copySign()

将第一个参数的值与第二个参数的符号组合返回:

Math.copySign(5, -1); // 返回 -5

支持 floatdouble

3. 指数与对数函数

Math 类也提供了处理指数和对数运算的方法。

3.1. exp()

返回自然常数 e 的 x 次幂(即 e^x):

Math.exp(1); // 返回 2.718281828459045

3.2. expm1()

返回 e^x - 1:

Math.expm1(1); // 返回 1.718281828459045

3.3. log()

返回自然对数(以 e 为底):

Math.log(Math.E); // 返回 1

3.4. log10()

返回以 10 为底的对数:

Math.log10(10); // 返回 1

3.5. log1p()

返回 ln(1 + x):

Math.log1p(Math.E); // 返回 1.3132616875182228

4. 三角函数

在处理几何相关问题时,这些函数非常常用:

4.1. sin()

返回指定弧度角的正弦值:

Math.sin(Math.PI / 2); // 返回 1

4.2. cos()

返回指定弧度角的余弦值:

Math.cos(0); // 返回 1

4.3. tan()

返回指定弧度角的正切值:

Math.tan(Math.PI / 4); // 返回 1

4.4. sinh(), cosh(), tanh()

返回双曲正弦、双曲余弦和双曲正切:

Math.sinh(Math.PI);
Math.cosh(Math.PI);
Math.tanh(Math.PI);

4.5. asin()

返回指定值的反正弦(弧度):

Math.asin(1); // 返回 π/2

结果范围为 [-π/2, π/2]

4.6. acos()

返回指定值的反余弦(弧度):

Math.acos(0); // 返回 π/2

结果范围为 [0, π]

4.7. atan()

返回指定值的反正切(弧度):

Math.atan(1); // 返回 π/4

结果范围为 [-π/2, π/2]

4.8. atan2()

根据直角坐标 (x, y) 转换为极坐标角度:

Math.atan2(1, 1); // 返回 π/4

4.9. toDegrees()

将弧度转换为角度:

Math.toDegrees(Math.PI); // 返回 180

4.10. toRadians()

将角度转换为弧度:

Math.toRadians(180); // 返回 π

⚠️ 注意:大部分三角函数都使用弧度,如果你只有角度,记得先用这个方法转换。

5. 舍入与其他函数

5.1. ceil()

返回大于等于参数的最小整数(向上取整):

Math.ceil(Math.PI); // 返回 4

5.2. floor()

返回小于等于参数的最大整数(向下取整):

Math.floor(Math.PI); // 返回 3

5.3. getExponent()

返回参数的无偏指数(IEEE 754 标准):

Math.getExponent(333.3); // 返回 8
Math.getExponent(222.2f); // 返回 7

5.4. IEEEremainder()

按照 IEEE 754 标准计算余数:

Math.IEEEremainder(5, 2); // 返回 1

5.5. nextAfter()

返回参数向目标方向的相邻浮点值:

Math.nextAfter(1.95f, 1); // 返回 1.9499999
Math.nextAfter(1.95f, 2); // 返回 1.9500002

5.6. nextUp()

返回向正无穷方向的下一个浮点值:

Math.nextUp(1.95f); // 返回 1.9500002

5.7. rint()

返回最接近参数的整数值(返回 double):

Math.rint(1.95f); // 返回 2.0

5.8. round()

返回最接近参数的整数(返回 intlong):

int result = Math.round(1.95f); // 返回 2
long result2 = Math.round(1.95); // 返回 2

5.9. scalb()

执行浮点数乘以 2 的幂操作(缩放):

Math.scalb(3, 4); // 返回 3 * 2^4 = 48

5.10. ulp()

返回参数与其相邻浮点数之间的距离:

Math.ulp(1); // 返回 1.1920929E-7
Math.ulp(2); // 返回 2.3841858E-7

5.11. hypot()

返回两个参数平方和的平方根(避免溢出):

Math.hypot(4, 3); // 返回 5

可用于计算两点间距离:Java 两点间距离

6. Java 8 中新增的 Math 方法

Java 8 为 Math 类新增了一些用于常见算术运算的方法。

详细说明可参考:Java 8 Math 新特性

7. 常量字段

Math 类定义了两个常用数学常量:

public static final double E   // 自然对数底数 e
public static final double PI  // 圆周率 π

8. 总结

本文系统介绍了 Java 中 Math 类提供的各种数学计算 API。这些方法在数值计算、几何处理、随机数生成等场景中非常实用。

✅ 示例代码可在 GitHub 获取:core-java-numbers-2


原始标题:A Guide to the Java Math Class