玩转Java数学运算:掌握Math类的常用方法

2023-11-22 00:20:49 浏览数 (1)


theme: healer-readable

highlight: a11y-dark


哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!

前言

  Java作为一门强大的开发语言,内置了许多基础类库,其中Math类就是其中之一。Math类提供了一些常见的数学函数和常量,方便开发者进行数学运算。

  本篇文章将对Java的Math类进行介绍和解析,包括其源代码、应用场景案例、优缺点分析等内容。

摘要

  Java的Math类是一个不可变类,其中提供了许多数学运算函数和常量。这些函数包括三角函数、幂函数、指数函数、对数函数、取整函数等。Math类的常量包括π和自然对数e等。

  Math类的方法是静态方法,不需要创建Math类的实例即可直接调用。由于是不可变类,Math类的方法不会修改其参数,而是返回计算结果。

Math类

简介

  Java的Math类是一个不可变的工具类,提供了许多数学函数和常量。Math类的方法都是静态方法,不需要创建Math类的实例即可直接调用。Math类提供的常量包括π和自然对数e等。

  Java的Math类提供了许多常见的数学运算函数,如三角函数、幂函数、指数函数、对数函数、取整函数等。Math类的方法返回值为double类型,如果要使用整型结果,则需要进行类型转换。

  除了常见的数学运算函数和常量之外,Math类还提供了一些特殊函数,如随机数函数、最大值函数、最小值函数等。

源代码解析

Math类是Java中的一个final类,即无法被继承。它的源代码如下:

代码语言:java复制
public final class Math {
    // 省略部分代码

    /**
     * Returns the trigonometric sine of an angle.
     *
     * @param  a   an angle, in radians.
     * @return the sine of the argument.
     */
    public static native double sin(double a);

    // 省略部分代码

    /**
     * Returns the largest (closest to positive infinity)
     * double value that is less than or equal to the argument and is
     * equal to a mathematical integer.
     * <p>
     * Special cases:
     * <ul>
     * <li>If the argument value is already equal to a mathematical
     *     integer, then the result is the same as the argument.
     * <li>If the argument is NaN or an infinity or positive zero or negative
     *     zero, then the result is the same as the argument.
     * <li>If the argument value is less than zero but greater than -1.0,
     *     then the result is negative zero.
     * </ul>
     * Note that the value of {@code Math.floor(x)} is exactly the
     * same as the value of {@code -(int)Math.ceil(-x)}.
     *
     * @param   a   a value.
     * @return  the largest (closest to positive infinity)
     *          floating-point value that less than or equal to the argument
     *          and is equal to a mathematical integer.
     */
    public static double floor(double a) {
        return StrictMath.floor(a); // use StrictMath
    }

    // 省略部分代码

}

  Math类,其中包含了很多数学计算相关的方法,如sin、floor等。其中的sin是一个native方法,意味着它的实现是由底层语言(如C/C )提供的,而不是由Java实现的。而floor方法则使用了StrictMath类的实现。

  注释中对floor方法进行了详细说明,指出它的功能是返回小于或等于参数值的最大double值,其值等于一个数学整数。在一些特殊情况下,如参数值已经是数学整数、参数值为NaN或无穷大、参数值小于零但大于-1.0等情况,返回结果会有所不同。此外,注释中还提到了Math.floor(x)与-(int)Math.ceil(-x)的等价关系。

  总体来说,这段代码为Java程序提供了一些常用的数学计算方法,如三角函数、取整等。

  如下是部分源码截图:

在这里插入图片描述在这里插入图片描述

应用场景案例

Math类常用于数学计算,比如求平方根、绝对值、最大值、最小值、幂等的计算等等。

以下是一些实际的应用场景案例:

1. 求平方根

代码语言:java复制
public class MathTest {

    public static void main(String[] args) {
        double a = 4;
        double result = Math.sqrt(a);
        System.out.println(result);   // 输出:2.0
    }
}

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

2. 求绝对值

代码语言:java复制
public class MathTest {

    public static void main(String[] args) {
        double a = -1.5;
        double result = Math.abs(a);
        System.out.println(result);   // 输出:1.5
    }
}

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

3. 求最大值

代码语言:java复制
public class MathTest {

    public static void main(String[] args) {
        double a = 2.5;
        double b = 3.0;
        double result = Math.max(a, b);
        System.out.println(result);   // 输出:3.0
    }
}

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

优缺点分析

  Math类提供了一系列与数学计算相关的方法,可以方便地进行数学计算。而且由于Math类中的方法都是静态的,因此可以直接通过类名调用,方便快捷。另外,Math类的源代码是开源的,可以根据需要进行改进和优化。

  但是,Math类并不是线程安全的。如果有多个线程同时调用Math类中的方法,可能会导致意想不到的问题。因此,在多线程环境下,需要采取相应措施(比如使用synchronized关键字)来保证线程安全。

类代码方法介绍

abs

代码语言:java复制
public static double abs(double a)

这个方法返回参数的绝对值。如果参数为NaN,则返回NaN。

ceil

代码语言:java复制
public static double ceil(double a)

这个方法返回最小的(最接近负无穷大)double值,该值大于等于参数,并等于某个整数。

floor

代码语言:java复制
public static double floor(double a)

这个方法返回最大的(最接近正无穷大)double值,该值小于等于参数,并等于某个整数。

max

代码语言:java复制
public static double max(double a, double b)

这个方法返回两个参数中的最大值。

min

代码语言:java复制
public static double min(double a, double b)

这个方法返回两个参数中的最小值。

pow

代码语言:java复制
public static double pow(double a, double b)

这个方法返回第一个参数的第二个参数次幂的值。

round

代码语言:java复制
public static long round(double a)

这个方法返回最接近参数的long类型值。结果是四舍五入的。

sin

代码语言:java复制
public static double sin(double a)

这个方法返回指定double型参数的正弦值。

sqrt

代码语言:java复制
public static double sqrt(double a)

这个方法返回参数的平方根。如果参数小于0,则返回NaN。

测试用例

以下是对Math类中几个常用方法的测试用例:

测试代码演示

代码语言:java复制
package com.example.javase.se.classes;

/**
 * @Author ms
 * @Date 2023-11-02 18:49
 */
public class MathTest {

    public static void main(String[] args) {
        double a = -1.5;
        double result = Math.abs(a);
        System.out.println("Absolute value of "   a   " is "   result);

        a = 1.5;
        result = Math.ceil(a);
        System.out.println("Ceiling value of "   a   " is "   result);

        a = 1.5;
        result = Math.floor(a);
        System.out.println("Floor value of "   a   " is "   result);

        double b = 2.0;
        result = Math.max(a, b);
        System.out.println("Maximum value between "   a   " and "   b   " is "   result);

        result = Math.min(a, b);
        System.out.println("Minimum value between "   a   " and "   b   " is "   result);

        double x = 2;
        double y = 3;
        result = Math.pow(x, y);
        System.out.println(x   " raised to the power of "   y   " is "   result);

        a = 1.5;
        long roundResult = Math.round(a);
        System.out.println("Rounded value of "   a   " is "   roundResult);

        double angle = Math.PI / 2;
        result = Math.sin(angle);
        System.out.println("Sine of "   angle   " radians is "   result);

        a = 4;
        result = Math.sqrt(a); 
        System.out.println("Square root of "   a   " is "   result);
    }
}

测试结果

  根据如上测试用例,本地测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加更多的测试数据或测试方法,进行熟练学习以此加深理解。

在这里插入图片描述在这里插入图片描述

测试代码分析

  根据如上测试用例,在此我给大家进行深入详细的解读一下测试代码,以便于更多的同学能够理解并加深印象。

  该测试用例是一个Java类,名为MathTest,用于演示Java中Math类的一些常用方法。该类中包含了一个名为main的静态方法,代表了程序的入口点。在main方法中,依次调用了Math类中的abs、ceil、floor、max、min、pow、round、sin和sqrt等方法,并输出了对应的结果。

  具体来看,第一行定义了一个double类型的变量a,并初始化为-1.5。第二行调用Math类中的abs方法,求出a的绝对值,将结果赋值给result变量。第三行输出结果。这个过程的结果是输出 "Absolute value of -1.5 is 1.5"。

  类似地,第四行调用Math类中的ceil方法,对1.5向上取整,将结果赋值给result变量。第五行输出结果。这个过程的结果是输出 "Ceiling value of 1.5 is 2.0"。

  第六、七行也类似,调用Math类中的floor方法对1.5向下取整,并输出结果 "Floor value of 1.5 is 1.0"。

  第八、九行调用Math类中的max和min方法,求出a和b的最大值和最小值,并依次输出结果 "Maximum value between 1.5 and 2.0 is 2.0" 和 "Minimum value between 1.5 and 2.0 is 1.5"。

  第十行调用Math类中的pow方法,求出x的y次方,并输出结果 "2.0 raised to the power of 3.0 is 8.0"。

  第十一、十二行调用Math类中的round方法,对1.5进行四舍五入,并输出结果 "Rounded value of 1.5 is 2"。

  第十三、十四行调用Math类中的sin和PI常量,求出PI/2的正弦值,并输出结果 "Sine of 1.5707963267948966 radians is 1.0"。

  最后,第十五、十六行调用Math类中的sqrt方法,求出4的平方根,并输出结果 "Square root of 4.0 is 2.0"。

小结

  本文介绍了Java中的Math类,包括定义、源代码解析、应用场景案例、优缺点分析、类代码方法介绍、测试用例等。Math类提供了一系列与数学计算相关的方法,可以方便地进行数学计算。但是,Math类并不是线程安全的,需要注意线程安全问题。

总结

  Java中的Math类是一个不可变的工具类,提供了许多数学函数和常量。Math类的方法都是静态方法,不需要创建Math类的实例即可直接调用。Math类提供的常量包括π和自然对数e等。它为Java程序提供了一些常用的数学计算方法,如三角函数、取整等。 Math类常用于数学计算,比如求平方根、绝对值、最大值、最小值、幂等的计算等等。然而,Math类并不是线程安全的,需要注意线程安全问题。总而言之,Math类是一个非常重要的工具类,常被开发者广泛使用,在使用过程中需要注意线程安全问题。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

***

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞