JAVA 入坑教程 | 章节十 基本数学运算Math类

简介: 点击左上角【目录】 简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节。 有问题可加入安卓QQ群: 246231638在高数中总会运用到各种类型的计算,如正弦、余弦、正切、π、反正切、底数e的参数次方等等,那这些在计算机中如何表述?当然,可以用数值类型(如int、double、float)去模拟所有方法的实现,但是这样等同于解一个方程式的值,痛苦不堪,其实在Java中已经帮我们封装好了这些函数的调用,就是这个Math 类,先来看看其API有哪些方法可以给我们玩的。

点击左上角【目录】
简单点,代码的方式简单点,装逼的方式请省略,我们又不是演员,别设计那些情节。
有问题可加入安卓QQ群: 246231638

在高数中总会运用到各种类型的计算,如正弦、余弦、正切、π、反正切、底数e的参数次方等等,那这些在计算机中如何表述?当然,可以用数值类型(如int、double、float)去模拟所有方法的实现,但是这样等同于解一个方程式的值,痛苦不堪,其实在Java中已经帮我们封装好了这些函数的调用,就是这个Math 类,先来看看其API有哪些方法可以给我们玩的。

API方法

来看下下面的API方法,为了方便查看我备注了中文说明。

S.N. 方法 & 描述
1 static double abs(double a) 此方法返回一个double值的绝对值.
2 static float abs(float a) 此方法返回一个float值的绝对值.
3 static int abs(int a) 此方法返回一个int值的绝对值.
4 static long abs(long a) 此方法返回一个long值的绝对值.
5 static double acos(double a) 此方法返回一个值的反余弦值,返回的角度范围从0.0到pi.
6 static double asin(double a) 此方法返回一个值的反正弦,返回的角度范围在-pi/2到pi/2.
7 static double atan(double a) 此方法返回一个值的反正切值,返回的角度范围在-pi/2到pi/2.
8 static double atan2(double y, double x) 此方法返回角度theta(x,y)从转换的矩形坐标到极坐标(r,θ).
9 static double cbrt(double a) 此方法返回一个double值的立方根.
10 static double ceil(double a) 此方法返回最小的(最接近负无穷大)double值,大于或等于参数,并等于一个整数.
11 static double copySign(double magnitude, double sign) 此方法返回的第一个浮点参数与第二个浮点参数的符号.
12 static float copySign(float magnitude, float sign) 此方法返回的第一个浮点参数与第二个浮点参数的符号.
13 static double cos(double a) 此方法返回一个角的三角余弦.
14 static double cosh(double x) 此方法返回一个double值的双曲余弦.
15 static double exp(double a) 此方法返回欧拉数e的一个double值的次幂.
16 static double expm1(double x) 此方法返回 ex -1.
17 static double floor(double a)此方法返回最大的(最接近正无穷大)double值小于或相等于参数,并相等于一个整数.
18 static int getExponent(double d) 此方法返回的无偏指数在该项表述的double.
19 static int getExponent(float f) 此方法返回一个浮点数的表示中使用的无偏指数.
20 static double hypot(double x, double y) 没有中间溢出或下溢的情况下,此方法返回的sqrt(x2 +y2) .
21 static double IEEEremainder(double f1, double f2) 这两个参数,IEEE 754标准规定的方法计算,其余操作.
22 static double log(double a)此方法返回一个double值的自然对数(以e为底).
23 static double log10(double a) 此方法返回一个double值以10为底.
24 static double log1p(double x) 此方法返回自然对数的总和的参数.
25 static double max(double a, double b) 此方法返回两个double值较大的那一个.
26 static float max(float a, float b) 此方法返回的两个浮点值最大的那一个.
27 static int max(int a, int b) 此方法返回两个int值中最大的那一个.
28 static long max(long a, long b) 此方法返回的两个long值中最大的那一个.
29 static double min(double a, double b)此方法返回的两个较小的double值.
30 static float min(float a, float b) 此方法返回的两个较小的浮动值.
31 static int min(int a, int b) 此方法返回的两个较小的int值.
32 static long min(long a, long b) 此方法返回的两个较小的长值.
33 static double nextAfter(double start, double direction)此方法返回浮点数相邻方向的第二个参数,第一个参数.
34 static float nextAfter(float start, double direction) 此方法返回浮点数相邻方向的第二个参数,第一个参数.
35 static double nextUp(double d) 在正无穷大的方向,此方法返回至d相邻的浮点值.
36 static float nextUp(float f) 此方法返回到f相邻的浮点值在正无穷方向上.
37 static double pow(double a, double b)此方法返回的第一个参数的值提升到第二个参数的幂
38 static double random() 该方法返回一个无符号的double值,大于或等于0.0且小于1.0.
39 static double rint(double a) 此方法返回的double值,值的参数是最接近的,相等于一个整数.
40 static long round(double a) 此方法返回的参数最接近的long.
41 static int round(float a) 此方法返回的参数最接近的整数.
42 static double scalb(double d, int scaleFactor) 此方法返回d × 2scaleFactor 四舍五入,如果由一个单一的正确舍入的浮点乘法的double值组的成员.
43 static float scalb(float f, int scaleFactor) 此方法返回f × 2scaleFactor 四舍五入,如果由一个单一的正确舍入的浮点乘法,浮点值集合的成员.
44 static double signum(double d) 此方法返回signum函数的参数,如果参数是零返回0,如果参数大于零返回1.0,如果参数小于零返回-1.0.
45 static float signum(float f) 此方法返回signum函数的参数,如果参数是零返回0,如果参数大于零返回1.0f,如果参数小于零返回-1.0f.
46 static double sin(double a) 此方法返回一个double值的双曲正弦.
47 static double sinh(double x) 此方法返回一个double值的双曲正弦.
48 static double sqrt(double a) 此方法返回正确舍入的一个double值的正平方根.
49 static double tan(double a) 此方法返回一个角的三角函数正切值
50 static double tanh(double x) 此方法返回一个double值的双曲正切.
51 static double toDegrees(double angrad) 这种方法大致相等的角度,以度为单位的角度转换成弧度测量.
52 static double toRadians(double angdeg) 此方法转换一个角度,以度为单位大致相等的角弧度测量.
53 static double ulp(double d) 此方法返回的参数的ulp的大小.
54 static double ulp(float f) 此方法返回的参数的ulp的大小.



相关函数的使用

※ . 可以看得出来,API还是挺强大的,我们想要的都有在里面。

来看下我总结的Math类 ↓

M类:Math 类
包名:Java.lang.Math
作用:包含的方法进行基本的数字操作,如基本的指数,对数,平方根、四舍五入、三角函数等等……
调用:Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用

※ . 那如何使用?可以看到,它是个静态类,那么我们可以直接用类名点的方式调取它,先看个例子 ↓

public class TestIMMQY {  
    public static void main (String []args)  
    {  
            System.out.println("测试Math类");
            System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));  
            System.out.println("0度的余弦值:" + Math.cos(0));  
            System.out.println("60度的正切值:" + Math.tan(Math.PI/3));  
            System.out.println("1的反正切值: " + Math.atan(1));  
            System.out.println("π:"+Math.PI); 
            System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));            
            System.out.println("两个之中的最大值"+Math.max(100.15,100.25));
    }  
}

控制台输出结果:

测试Math90 度的正弦值:1.0
0度的余弦值:1.0
60度的正切值:1.7320508075688767
1的反正切值: 0.7853981633974483
π:3.141592653589793
π/2的角度值:90.0
两个之中的最大值100.25


随机函数

※ . 当然,有个函数是我们常常使用到的,那就是随机数,我们在API中可以看到,Random方法是产生随机数字,那么我们来测试下,这里我们用个for循环打印5次看看结果

  for (int i = 0; i < 5; i++) {
                System.out.println("->"+Math.random());
  }

控制台输出的结果:

->0.28416240369629464
->0.7486394990609012
->0.20984167308126322
->0.37751025923559334
->0.4962734671679535



可以看出,该方法返回的是一个无符号的double值,大于或等于0.0且小于1.0.
所以,我们只需要让它乘以100以后,转换成int类型,则会输出100以内的整数。

 for (int i = 0; i < 5; i++) {
                System.out.println("->"+(int)(Math.random()*100));
 }

控制台输出结果:

->27
->3
->3
->25
->87


取整函数

那除了随机数、高数用到的相关函数之外,取整函数也是比较常用的。
主要分为三大类:

  1. ceil
  2. floor
  3. round

  • ceil,意思是天花板,java中叫做向上取整,大于等于该数字的最接近的整数
math.ceil(13.2)=14
math.ceil(-13.2)=-13
  • floor,意思是地板,java中叫做向下取整,小于等于该数字的最接近的整数
math.floor(13.2)=13
math.floor(-13.2)=-14
  • round,最特殊,其实就是四舍五入
math.round(13.2)=13;math.round(13.5)=14
math.round(-13.2)=-13,math.round(-13.5)=-13


总结

Math类主要是辅助数字运算的一个类,与 StrictMath 类的某些数学方法不同,并非 Math 类所有等价函数的实现都定义为返回逐位相同的结果。此类在不需要严格重复的地方可以得到更好的执行,像我们初中常写的函数都是可以用得上的,如开方,三角函数之类,几乎都是可以用得上的,最后上一小段代码自己感受下。

Math.sqrt 求开方
Math.pow 求某数的任意次方, 抛出ArithmeticException处理溢出异常
Math.sqrt(x):平方根
Math.pow(x,y):xy次方
//……
java.math.BigInteger(大整数):
BigInteger bi1=new BigInteger("1234567890123456890");
BigInteger bi2=BigInteger.valueOf(123L);
bi1=bi1.add(bi2);//b1+b2
bi1=bi1.multiply(bi2);//b1*b2
bi1=bi1.subtract(bi2);//b1-b2
bi1=bi1.divide(bi2);// b1/b2

java.math.BigDecimal(大浮点数):
BigDecimal bd = new BigDecimal("3.1415926");
bd = bd.setScale(2,BigDecimal.ROUND_DOWN);//取3.1415926小数点后面二位



如果前面的基础没看的可以点击 《JAVA 入坑教程系列》



|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。

相关文章
|
4天前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
|
13天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
18天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
64 4
|
18天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
38 2
|
21天前
|
安全 Java 编译器
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
Kotlin教程笔记(27) -Kotlin 与 Java 共存(二)
|
21天前
|
Java 开发工具 Android开发
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
Kotlin教程笔记(26) -Kotlin 与 Java 共存(一)
|
21天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
|
7天前
|
Java 编译器 Android开发
Kotlin教程笔记(28) -Kotlin 与 Java 混编
Kotlin教程笔记(28) -Kotlin 与 Java 混编
10 0
|
8天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
下一篇
无影云桌面