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 入坑教程系列》



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

相关文章
|
24天前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
173 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
2天前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
|
2天前
|
Java
课时15:Java运算符(基础数学运算符)
课时15介绍了Java中的基础数学运算符,涵盖加、减、乘、除及自增自减运算。强调了运算符的优先级和使用括号的重要性,并通过范例展示了四则运算与自增自减的具体应用。提醒编写代码时应保持简洁,避免复杂的表达式,确保代码易读性和可维护性。
|
1天前
|
存储 Java 编译器
课时11:综合实战:简单Java类
本次分享的主题是综合实战:简单 Java 类。主要分为两个部分: 1.简单 Java 类的含义 2.简单 Java 类的开发
|
3天前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
17 5
|
1天前
|
Oracle Java 关系型数据库
课时37:综合实战:数据表与简单Java类映射转换
今天我分享的是数据表与简单 Java 类映射转换,主要分为以下四部分。 1. 映射关系基础 2. 映射步骤方法 3. 项目对象配置 4. 数据获取与调试
|
24天前
|
安全 Java 编译器
JAVA泛型类的使用(二)
接上一篇继续介绍Java泛型的高级特性。3. **编译时类型检查**:尽管运行时发生类型擦除,编译器会在编译阶段进行严格类型检查,并允许通过`extends`关键字对类型参数进行约束,确保类型安全。4. **桥方法**:为保证多态性,编译器会生成桥方法以处理类型擦除带来的问题。5. **运行时获取泛型信息**:虽然泛型信息在运行时被擦除,但可通过反射机制部分恢复这些信息,例如使用`ParameterizedType`来获取泛型参数的实际类型。
|
9天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
120 60
【Java并发】【线程池】带你从0-1入门线程池
|
5天前
|
Java 调度
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
51 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
|
21天前
|
Java 程序员 开发者
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
87 14

热门文章

最新文章