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

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

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

我是一名后端开发爱好者,工作日常接触到最多的就是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 !!!


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

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

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

相关推荐
许野平22 分钟前
Rust: 利用 chrono 库实现日期和字符串互相转换
开发语言·后端·rust·字符串·转换·日期·chrono
duration~37 分钟前
Maven随笔
java·maven
zmgst40 分钟前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
跃ZHD1 小时前
前后端分离,Jackson,Long精度丢失
java
blammmp1 小时前
Java:数据结构-枚举
java·开发语言·数据结构
暗黑起源喵1 小时前
设计模式-工厂设计模式
java·开发语言·设计模式
WaaTong2 小时前
Java反射
java·开发语言·反射
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
九圣残炎2 小时前
【从零开始的LeetCode-算法】1456. 定长子串中元音的最大数目
java·算法·leetcode
wclass-zhengge2 小时前
Netty篇(入门编程)
java·linux·服务器