java学习--Math 类常用方法

Java 中 Math 类的常用方法,java.lang.Math 是 Java 提供的数学工具类,包含了大量用于执行基本数学运算的静态方法(无需创建对象,直接通过 Math.方法名() 调用),下面按功能分类讲解核心常用方法:

一、基本算术运算

1. 绝对值:abs()

返回任意数值类型的绝对值,支持 intlongfloatdouble 四种类型。

复制代码
// int 类型绝对值
System.out.println(Math.abs(-10)); // 输出:10
// double 类型绝对值
System.out.println(Math.abs(-3.14)); // 输出:3.14
// long 类型绝对值
System.out.println(Math.abs(-10000000000L)); // 输出:10000000000

2. 取整运算

(1)向下取整:floor(double a)

返回小于等于参数 a 的最大整数(向负无穷方向取整),返回值为 double 类型。

复制代码
System.out.println(Math.floor(3.9)); // 输出:3.0
System.out.println(Math.floor(-3.1)); // 输出:-4.0
(2)向上取整:ceil(double a)

返回大于等于参数 a 的最小整数(向正无穷方向取整),返回值为 double 类型。

复制代码
System.out.println(Math.ceil(3.1)); // 输出:4.0
System.out.println(Math.ceil(-3.9)); // 输出:-3.0
(3)四舍五入:round()

按 "四舍五入" 规则取整,支持两种类型:

  • long round(double a):对 double 类型取值,返回 long 类型结果;

  • int round(float a):对 float 类型取值,返回 int 类型结果。

    // double 类型四舍五入
    System.out.println(Math.round(3.49)); // 输出:3(long 类型)
    System.out.println(Math.round(3.5)); // 输出:4(long 类型)
    // float 类型四舍五入
    System.out.println(Math.round(2.3f)); // 输出:2(int 类型)

(4)就近取整(银行家舍入法):rint(double a)

返回最接近参数 a 的整数,若存在两个等距整数,返回偶数,返回值为 double 类型。

复制代码
System.out.println(Math.rint(3.5)); // 输出:4.0(与 3 和 4 等距,返回偶数 4)
System.out.println(Math.rint(4.5)); // 输出:4.0(与 4 和 5 等距,返回偶数 4)
System.out.println(Math.rint(3.2)); // 输出:3.0

3. 取余运算:IEEEremainder(double f1, double f2)

返回两个 double 类型数值的余数(遵循 IEEE 754 标准,与 % 运算符略有差异,通常场景下 % 更常用)。

复制代码
System.out.println(Math.IEEEremainder(10, 3)); // 输出:1.0
System.out.println(Math.IEEEremainder(10, -3)); // 输出:1.0

二、数值比较与极值

1. 最大值:max()

返回两个同类型数值中的较大值,支持 intlongfloatdouble 四种类型。

复制代码
System.out.println(Math.max(10, 20)); // 输出:20(int 类型)
System.out.println(Math.max(3.14, 2.71)); // 输出:3.14(double 类型)

2. 最小值:min()

返回两个同类型数值中的较小值,支持 intlongfloatdouble 四种类型。

复制代码
System.out.println(Math.min(10, 20)); // 输出:10(int 类型)
System.out.println(Math.min(3.14, 2.71)); // 输出:2.71(double 类型)

3. 限制数值范围(JDK 1.8+):clamp()

将数值限制在 minmax 之间,若数值小于 min 返回 min,大于 max 返回 max,否则返回自身,支持 intlongfloatdouble 四种类型。

复制代码
System.out.println(Math.clamp(15, 10, 20)); // 输出:15(在范围内,返回自身)
System.out.println(Math.clamp(5, 10, 20)); // 输出:10(小于最小值,返回 min)
System.out.println(Math.clamp(25, 10, 20)); // 输出:20(大于最大值,返回 max)

三、幂运算与指数 / 对数运算

1. 幂运算:pow(double a, double b)

返回 ab 次方(a^b),两个参数均为 double 类型,返回值为 double 类型。

复制代码
System.out.println(Math.pow(2, 3)); // 输出:8.0(2的3次方)
System.out.println(Math.pow(10, 2)); // 输出:100.0(10的平方)
System.out.println(Math.pow(4, 0.5)); // 输出:2.0(4的平方根,等价于 sqrt(4))

2. 平方根:sqrt(double a)

返回参数 a 的算术平方根(仅支持非负数值,负数返回 NaN),返回值为 double 类型。

复制代码
System.out.println(Math.sqrt(16)); // 输出:4.0
System.out.println(Math.sqrt(2)); // 输出:1.4142135623730951
System.out.println(Math.sqrt(-1)); // 输出:NaN(非数字)

3. 立方根:cbrt(double a)

返回参数 a 的立方根(支持正负数值),返回值为 double 类型。

复制代码
System.out.println(Math.cbrt(8)); // 输出:2.0
System.out.println(Math.cbrt(-8)); // 输出:-2.0
System.out.println(Math.cbrt(27)); // 输出:3.0

4. 自然指数(e^x):exp(double a)

返回自然常数 e(约 2.71828)的 a 次方,返回值为 double 类型。

复制代码
System.out.println(Math.exp(1)); // 输出:2.718281828459045(e^1)
System.out.println(Math.exp(2)); // 输出:7.38905609893065(e^2)

5. 对数运算

(1)自然对数(ln x):log(double a)

返回参数 a 的自然对数(以 e 为底),仅支持正数值,返回值为 double 类型。

复制代码
System.out.println(Math.log(Math.E)); // 输出:1.0(ln e = 1)
System.out.println(Math.log(10)); // 输出:2.302585092994046
(2)常用对数(log10 x):log10(double a)

返回参数 a 的常用对数(以 10 为底),仅支持正数值,返回值为 double 类型。

复制代码
System.out.println(Math.log10(10)); // 输出:1.0
System.out.println(Math.log10(100)); // 输出:2.0

四、三角函数与反三角函数

1. 基础三角函数(参数为弧度值)

  • sin(double a):正弦函数

  • cos(double a):余弦函数

  • tan(double a):正切函数

    // 30度对应的弧度值:Math.PI / 6
    System.out.println(Math.sin(Math.PI / 6)); // 输出:0.5(正弦30度)
    // 60度对应的弧度值:Math.PI / 3
    System.out.println(Math.cos(Math.PI / 3)); // 输出:0.5(余弦60度)
    // 45度对应的弧度值:Math.PI / 4
    System.out.println(Math.tan(Math.PI / 4)); // 输出:1.0(正切45度)

2. 反三角函数(返回值为弧度值)

  • asin(double a):反正弦函数(返回值范围:[-π/2, π/2])

  • acos(double a):反余弦函数(返回值范围:[0, π])

  • atan(double a):反正切函数(返回值范围:[-π/2, π/2])

    System.out.println(Math.asin(0.5)); // 输出:0.5235987755982988(对应30度,即π/6)
    System.out.println(Math.acos(0.5)); // 输出:1.0471975511965976(对应60度,即π/3)
    System.out.println(Math.atan(1.0)); // 输出:0.7853981633974483(对应45度,即π/4)

3. 角度与弧度转换

  • toRadians(double angdeg):角度转换为弧度

  • toDegrees(double angrad):弧度转换为角度

    // 角度转弧度
    System.out.println(Math.toRadians(30)); // 输出:0.5235987755982988(π/6)
    // 弧度转角度
    System.out.println(Math.toDegrees(Math.PI / 4)); // 输出:45.0

五、随机数生成

1. 基础随机数:random()

返回一个 [0.0, 1.0) 区间内的随机 double 类型数值(包含 0.0,不包含 1.0)。

复制代码
// 生成 10 个 [0.0, 1.0) 随机数
for (int i = 0; i < 10; i++) {
    System.out.println(Math.random());
}

// 生成 [min, max) 区间的随机整数(示例:[1, 100))
int min = 1;
int max = 100;
int randomInt = (int) (Math.random() * (max - min) + min);
System.out.println("1到99的随机整数:" + randomInt);

// 生成 [min, max] 区间的随机整数(示例:[1, 100])
int randomInt2 = (int) (Math.random() * (max - min + 1) + min);
System.out.println("1到100的随机整数:" + randomInt2);

六、常量与其他常用方法

1. 常用数学常量

  • Math.PI:圆周率(π),约等于 3.141592653589793

  • Math.E:自然常数(e),约等于 2.718281828459045

    System.out.println("圆周率:" + Math.PI);
    System.out.println("自然常数:" + Math.E);

2. 符号函数:signum(double a)

返回数值的符号:正数返回 1.0,负数返回 -1.0,0 返回 0.0,支持 doublefloat 类型。

复制代码
System.out.println(Math.signum(10.5)); // 输出:1.0
System.out.println(Math.signum(-3.2)); // 输出:-1.0
System.out.println(Math.signum(0)); // 输出:0.0

3. 绝对值与符号结合:copySign(double magnitude, double sign)

返回第一个参数的绝对值,并带有第二个参数的符号,支持 doublefloat 类型。

复制代码
// 10.5 取绝对值,带上 -3.2 的符号(负号)
System.out.println(Math.copySign(10.5, -3.2)); // 输出:-10.5
// -3.2 取绝对值,带上 10.5 的符号(正号)
System.out.println(Math.copySign(-3.2, 10.5)); // 输出:3.2

七、完整使用示例

复制代码
public class MathDemo {
    public static void main(String[] args) {
        // 1. 基本算术运算
        System.out.println("绝对值:" + Math.abs(-15));
        System.out.println("向下取整:" + Math.floor(4.7));
        System.out.println("向上取整:" + Math.ceil(4.2));
        System.out.println("四舍五入:" + Math.round(4.5));

        // 2. 极值运算
        System.out.println("最大值:" + Math.max(20, 30));
        System.out.println("最小值:" + Math.min(20, 30));
        System.out.println("范围限制:" + Math.clamp(25, 10, 20));

        // 3. 幂运算与对数运算
        System.out.println("2的4次方:" + Math.pow(2, 4));
        System.out.println("16的平方根:" + Math.sqrt(16));
        System.out.println("8的立方根:" + Math.cbrt(8));
        System.out.println("以10为底100的对数:" + Math.log10(100));

        // 4. 三角函数(角度转弧度)
        double radian = Math.toRadians(60);
        System.out.println("60度的正弦值:" + Math.sin(radian));
        System.out.println("60度的余弦值:" + Math.cos(radian));

        // 5. 随机数
        int randomNum = (int) (Math.random() * 100 + 1);
        System.out.println("1到100的随机整数:" + randomNum);

        // 6. 常量
        System.out.println("圆周率:" + Math.PI);
        System.out.println("自然常数:" + Math.E);
    }
}

八、核心总结

  1. Math 类是静态工具类 ,所有方法均为静态方法,直接通过 Math.方法名() 调用;
  2. 核心功能分类:算术运算(abs/floor/ceil/round)、极值运算(max/min/clamp)、幂 / 指数 / 对数运算(pow/sqrt/log)、三角函数、随机数(random);
  3. 注意事项:三角函数参数为弧度值 ,需通过 toRadians()/toDegrees() 进行角度与弧度转换;random() 生成 [0.0,1.0) 随机数,需手动转换为指定区间的整数;
  4. 适用场景:数值计算、数据处理、随机数生成、几何运算等需要数学计算的场景。
相关推荐
Lisonseekpan2 小时前
UUID vs 自增ID做主键,哪个好?
java·数据库·后端·mysql
利刃大大2 小时前
【SpringBoot】配置文件 && 日志输出 && lombok
java·spring boot·后端
C+++Python2 小时前
如何选择合适的锁机制来提高 Java 程序的性能?
java·前端·python
long3162 小时前
类与对象 | 低级别设计 (LLD)
java·spring boot·学习·程序人生·spring·设计模式·学习方法
专注于大数据技术栈2 小时前
java学习--String、StringBuilder、StringBuffer 的核心区别
java·学习
LiYingL2 小时前
USO“,一种基于分离和奖励学习的新方法:走在将风格和主题融为一体的图像生成的最前沿
人工智能·学习·计算机视觉
我命由我123452 小时前
Java 开发问题:包名 ‘com.my.compressimagetest‘ 与同名的类发生冲突
java·开发语言·学习·java-ee·intellij-idea·学习方法·intellij idea
⑩-2 小时前
Sleep与Wait的区别
java·开发语言
程序员阿鹏2 小时前
List和Set的区别
java·开发语言·数据结构·后端·list