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



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

相关文章
|
1天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
1天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
1天前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(四十一)-java+ selenium自动化测试 - 处理iframe -上篇(详解教程)
【5月更文挑战第5天】本文介绍了HTML中的`iframe`标签,它用于在网页中嵌套其他网页。`iframe`常用于加载外部内容或网站的某个部分,以实现页面美观。文章还讲述了使用Selenium自动化测试时如何处理`iframe`,通过`switchTo().frame()`方法进入`iframe`,完成相应操作,然后使用`switchTo().defaultContent()`返回主窗口。此外,文章提供了一个包含`iframe`的HTML代码示例,并给出了一个简单的自动化测试代码实战,演示了如何在`iframe`中输入文本。
13 3
|
2天前
|
Java 编译器 开发者
Java一分钟之-继承:复用与扩展类的特性
【5月更文挑战第9天】本文探讨了Java中的继承机制,通过实例展示了如何使用`extends`创建子类继承父类的属性和方法。文章列举了常见问题和易错点,如构造器调用、方法覆盖、访问权限和类型转换,并提供了解决方案。建议深入理解继承原理,谨慎设计类结构,利用抽象类和接口以提高代码复用和扩展性。正确应用继承能构建更清晰、灵活的代码结构,提升面向对象设计能力。
9 0
|
2天前
|
Java
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类
11 0
|
2天前
|
Java API 调度
【Java多线程】Thread类的基本用法
【Java多线程】Thread类的基本用法
6 0
|
2天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
2天前
|
JavaScript 前端开发 Java
《手把手教你》系列技巧篇(四十)-java+ selenium自动化测试-JavaScript的调用执行-下篇(详解教程)
【5月更文挑战第4天】本文介绍了如何使用JavaScriptExecutor在自动化测试中实现元素高亮显示。通过创建并执行JS代码,可以改变元素的样式,例如设置背景色和边框,以突出显示被操作的元素。文中提供了一个Java示例,展示了如何在Selenium中使用此方法,并附有代码截图和运行效果展示。该技术有助于跟踪和理解测试过程中的元素交互。
8 0
|
Java
数学知识能救命了?快来用java解决数学问题吧
数学知识能救命了?快来用java解决数学问题吧
95 0
|
1天前
|
安全 Java
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解
【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解