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基础(二):原码、反码、补码及进制之间的运算
79 13
Java基础(二):原码、反码、补码及进制之间的运算
|
8天前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
152 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
28天前
|
消息中间件 Java 数据库
自研Java框架 Sunrays-Framework使用教程「博客之星」
### Sunrays-Framework:助力高效开发的Java微服务框架 **Sunrays-Framework** 是一款基于 Spring Boot 构建的高效微服务开发框架,深度融合了 Spring Cloud 生态中的核心技术组件。它旨在简化数据访问、缓存管理、消息队列、文件存储等常见开发任务,帮助开发者快速构建高质量的企业级应用。 #### 核心功能 - **MyBatis-Plus**:简化数据访问层开发,提供强大的 CRUD 操作和分页功能。 - **Redis**:实现高性能缓存和分布式锁,提升系统响应速度。 - **RabbitMQ**:可靠的消息队列支持,适用于异步
自研Java框架 Sunrays-Framework使用教程「博客之星」
|
8天前
|
安全 Java 编译器
JAVA泛型类的使用(二)
接上一篇继续介绍Java泛型的高级特性。3. **编译时类型检查**:尽管运行时发生类型擦除,编译器会在编译阶段进行严格类型检查,并允许通过`extends`关键字对类型参数进行约束,确保类型安全。4. **桥方法**:为保证多态性,编译器会生成桥方法以处理类型擦除带来的问题。5. **运行时获取泛型信息**:虽然泛型信息在运行时被擦除,但可通过反射机制部分恢复这些信息,例如使用`ParameterizedType`来获取泛型参数的实际类型。
|
8天前
|
安全 Java 编译器
JAVA泛型类的使用(一)
Java 泛型类是 JDK 5.0 引入的重要特性,提供编译时类型安全检测,增强代码可读性和可维护性。通过定义泛型类如 `Box&lt;T&gt;`,允许使用类型参数。其核心原理是类型擦除,即编译时将泛型类型替换为边界类型(通常是 Object),确保与旧版本兼容并优化性能。例如,`Box&lt;T&gt;` 编译后变为 `Box&lt;Object&gt;`,从而实现无缝交互和减少内存开销。
|
30天前
|
Java 数据库连接 数据处理
探究Java异常处理【保姆级教程】
Java 异常处理是确保程序稳健运行的关键机制。它通过捕获和处理运行时错误,避免程序崩溃。Java 的异常体系以 `Throwable` 为基础,分为 `Error` 和 `Exception`。前者表示严重错误,后者可细分为受检和非受检异常。常见的异常处理方式包括 `try-catch-finally`、`throws` 和 `throw` 关键字。此外,还可以自定义异常类以满足特定需求。最佳实践包括捕获具体异常、合理使用 `finally` 块和谨慎抛出异常。掌握这些技巧能显著提升程序的健壮性和可靠性。
47 4
|
30天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
52 1
|
2月前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
1432 1
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
2月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
186 26
|
2月前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。