1. 简介
本篇文章将介绍 Java 中的 Math
类,它提供了大量静态方法,用于执行常见的数值计算操作,比如指数、对数、三角函数等。
2. 基础数学函数
我们先来看一些基础的数学函数,包括绝对值、平方根、最大值、最小值等。
2.1. abs()
abs()
方法用于获取一个数的绝对值:
Math.abs(-5); // 返回 5
该方法支持 int
、long
、float
和 double
类型的参数。
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
支持 int
、long
、float
和 double
类型。
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
- 零则返回其本身(包括正负零)
支持 float
和 double
。
2.9. copySign()
将第一个参数的值与第二个参数的符号组合返回:
Math.copySign(5, -1); // 返回 -5
支持 float
和 double
。
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()
返回最接近参数的整数(返回 int
或 long
):
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