60从零开始学Java之与数字相关的类有哪些?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦

千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者

前言

我们在解决实际问题时,会经常对数字、日期和系统设置进行处理,比如在我们的代码中,经常会遇到一些数字&数学问题、随机数问题、日期问题和系统设置问题等。为了解决这些问题,Java给我们提供了多个处理相关问题的类,比如Number类、Math类、Random类、BigInteger类、BigDecimal类、Date类、System类等。接下来,壹哥会利用几篇文章,给大家详细地介绍这些与数学、日期、系统处理等相关的类,本篇文章我们先从Number数字类和Math数学类学起。

-----------------------------------------------前戏已做完,精彩即开始---------------------------------------------

全文大约【3000】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......

配套开源项目资料

Github:

GitHub - SunLtd/LearnJava

Gitee:

从零开始学Java: 从零开始学Java系列稀土掘金专栏地址:https://juejin.cn/column/7175082165548351546CSDN专栏地址:https://yiyige.blog.csdn.net/article/details/129377219?spm=1001.2014.3001.5502

一. Number类

1. 内容回顾

在学习Java里的Math数学类之前,我们再来回顾一下之前学习过的Number数字类。

我们知道,Java里的数据类型可以分为引用类型和基本类型,其中基本类型有3大类8个子类,如下图所示:

实际上,无论是整数型还是浮点型,它们都是数值型,当我们定义数值型变量时,都是直接操作的数字。而在实际开发中,我们还经常遇到需要使用对象,而不是使用内置数据类型的情况。所以为了解决这个问题,Java又为每一个内置的基本数据类型提供了对应的包装类。其中,6个数值型对应的包装类(Byte、Short、Integer、Long、Float、Double),都是抽象类Number的子类。在基本类型和包装类型之间,会涉及到装箱和拆箱的操作,大家可以回顾一下这是怎么回事,如果你想不起来,请回过头来看看壹哥之前的文章哦。

2. 数字格式化

我们在使用数字时,很多时候并不只是简单地原文展示,还要对这些数字进行各种格式化操作,比如设置小数点后几位、数字后带%号或货币符号等。这种使用场景,在解决实际问题时是很普遍的。但我们不用在数字后手动添加,Java自带了一个DecimalFormat类,可以对数字进行格式化处理。
DecimalFormat是NumberFormat的子类,用于格式化十进制数字,该类包含一个模式和一组符号,这些常用的符号含义如下:

符号

说明

0

显示数字,如果位数不够则补0

#

显示数字,如果位数不够不发生变化

.

小数分隔符

-

减号

,

组分隔符

E

分隔科学记数法中的尾数和小数

%

前缀或后缀,乘以 100 后作为百分比显示

?

乘以 1000 后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符

接下来壹哥通过一个案例来演示DecimalFormat的用法:

/*** @author 一一哥Sun * V我领资料:syc_2312119590 * 各平台都有壹哥的同名博客哦*/
public class Demo08 {public static void main(String[] args) {// 实例化DecimalFormat类对象,并设置格式//小数点后保留1位DecimalFormat df1 = new DecimalFormat("0.0");//整数格式DecimalFormat df2 = new DecimalFormat("#.#");//小数点后保留3位小数DecimalFormat df3 = new DecimalFormat("000.000");//以100%百分比格式显示DecimalFormat df4 = new DecimalFormat("#%");float f = 1000f;// 对输入的数字应用格式,并输出结果System.out.println("0.0格式:" + df1.format(f));System.out.println("#.#格式:" + df2.format(f));System.out.println("000.000格式:" + df3.format(f));System.out.println("百分比格式:" + df4.format(f));}
}

二. Math数学类

1. 简介

在开发的时候,我们经常需要对数字进行各种数学计算,虽然Java给我们提供了+、-、*、/ 和 % 等基本算术运算符,但这些符号并不能进行更复杂的数学运算,例如三角函数、对数运算、指数运算等。所以为了方便实现这些数学计算功能,Java自身就给我们提供了一个Math数学类,用于进行各种常见的数学操作。

Math中提供了用于执行基本数学运算的多个属性和方法,如初等指数、对数、平方根和三角函数等。Math 类位于 java.lang包中,它的构造方法是 private私有的,因此我们无法创建 Math类对象。为了方便调用这些方法和属性,Math类中的很多方法和属性都被定义为static形式,这样我们就可以直接调用了。

接下来壹哥就给大家分别介绍一下Math类中的常用属性和方法,这些方法比较多,大家不用专门的记忆,以后用到时根据名字就能猜出来它们的功能。但是对于一些容易引起混淆的方法,壹哥还是希望大家要稍微记一下。

2. 静态常量

Math类给我们提供了两个比较常用的静态常量,分别是 E 和 PI,它们的值分别等于 e(自然对数) 和 π(圆周率)。这两个属性我们可以直接调用,如下所示:

public static void main(String[] args) {//静态常量E和PISystem.out.println("E常量的值:" + Math.E);System.out.println("PI常量的值:" + Math.PI);
}

3. 计算最大值、最小值和绝对值

我们还经常对数字计算最大值、最小值和绝对值,Math类中提供了对应的多个重载方法,这些方法如下表所示:

方法

说明

static int abs(int a)

返回 a 的绝对值

static int max(int x,int y)

返回 x 和 y 中的最大值

static int min(int x,int y)

返回 x 和 y 中的最小值

以上这4个方法,分别都有4个重载方法,主要是方法的参数类型不同,而且返回值也不同,它们都可以接收int、long、float、double 4种类型的参数。这几个方法的用法如下:

public static void main(String[] args) {//计算最大值、最小值、绝对值System.out.println("5和35中的最大值:" + Math.max(35, 5));System.out.println("0.1和-100中的较小值:" + Math.min(0.1, -100));System.out.println("-900的绝对值:" + Math.abs(-900));
}

4. 求整运算

Math类给我们提供了好几个用于求整的方法,用于得到整数部分,如下表所示:

方法

说明

static double ceil(double a)

返回大于或等于 a 的最小整数

static double floor(double a)

返回小于或等于 a 的最大整数

static double rint(double a)

返回最接近 a 的整数值,如果有两个同样接近的整数,则结果取偶数

static int round(float a)

将参数加上 1/2 后返回与参数最近的整数

static long round(double a)

将参数加上 1/2 后返回与参数最近的整数,然后强制转换为长整型

以上方法的用法如下所示:

import java.util.Scanner;/*** @author 一一哥Sun*/
public class Demo03 {public static void main(String[] args) {//求整运算Scanner input = new Scanner(System.in);System.out.println("请输入一个数字...");//num=10.5double num = input.nextDouble();//向上取整System.out.println("向上取整:"+Math.ceil(num));//11.0//向下取整System.out.println("向下取整:"+Math.floor(num));//10.0//四舍五入System.out.println("四舍五入:"+Math.round(num));//11//返回最接近num的整数值,如果有两个同样接近的整数,则结果取偶数.System.out.println("最接近 "+num+" 的整数:" + Math.rint(num));//10.0}}

5. 三角函数运算

Math中还给我们提供了用于计算三角函数的方法,如下表所示:

方法

说明

static double sin(double a)

返回角的三角正弦值,参数以孤度为单位

static double cos(double a)

返回角的三角余弦值,参数以孤度为单位

static double asin(double a)

返回一个值的反正弦值,参数域在 [-1,1],值域在 [-PI/2,PI/2]

static double acos(double a)

返回一个值的反余弦值,参数域在 [-1,1],值域在 [0.0,PI]

static double tan(double a)

返回角的三角正切值,参数以弧度为单位

static double atan(double a)

返回一个值的反正切值,值域在 [-PI/2,PI/2]

static double toDegrees(double angrad)

将用孤度表示的角转换为近似相等的用角度表示的角

staticdouble toRadians(double angdeg)

将用角度表示的角转换为近似相等的用弧度表示的角

以上方法的用法如下所示:

/*** @author 一一哥Sun*/
public class Demo04 {public static void main(String[] args) {//三角函数运算//Math.sin()方法参数的单位是弧度,90度表示的是角度,需要把90度转换为弧度,即Math.PI/180*90,故转换后的弧度为Math.PI/2System.out.println("90度的正弦值:" + Math.sin(Math.PI/2));System.out.println("0度的余弦值:" + Math.cos(0));System.out.println("30的正切值:" + Math.tan(30));System.out.println("30的反正切值:" + Math.atan(30));System.out.println("1.8弧度的角度值:" + Math.toDegrees(1.8));System.out.println("100度的弧度值:" + Math.toRadians(100.0));}
}

6. 指数运算

指数运算包括求方根、取对数、求n次方等运算,Math类中定义的指数运算方法如下表所示:

方法

说明

static double exp(double a)

返回 e 的 a 次幂

static double pow(double a,double b)

返回以 a 为底数,以 b 为指数的幂值

static double sqrt(double a)

返回 a 的平方根

static double cbrt(double a)

返回 a 的立方根

static double log(double a)

返回 a 的自然对数,即 lna 的值

static double log10(double a)

返回以 10 为底 a 的对数

以上方法的用法如下所示:

public static void main(String[] args) {//指数运算System.out.println("5的立方值:" + Math.pow(5, 3));//求a的立方根,参数是要开立方的数System.out.println("27的立方根:"+Math.cbrt(27));System.out.println("16的平方根:" + Math.sqrt(16));System.out.println("10为底,2的对数:" + Math.log10(2));
}

7. 生成随机数

在Math类中还给我们提供了一个用于生成[0~1)范围内随机数的random()方法。该方法没有参数,它默认会返回一个 >=0.0、<1.0 的 double类型随机数,即随机数的取值范围是[0~1)。我们只需对 random()方法的返回值稍加处理,即可产生任意范围内的随机数。该方法使用比较简单,案例如下:

//随机数 默认的范围[0,1)
System.out.println(Math.random());//随机生成一个两位数,[0,1)*90,0,90) + 10     
System.out.println((int)(Math.random()*90)+10);

8. 配套视频

与本节内容配套的视频链接如下:

External Player - 哔哩哔哩嵌入式外链播放器

------------------------------------------------正片已结束,来根事后烟----------------------------------------------

三. 结语

至此,壹哥就把与数字、数学、随机数等相关的类给大家介绍完了,本节内容没有特别难的地方,主要是需要大家记住几个常用方法即可。如果你独自学习觉得有很多困难,可以加入壹哥的学习互助群,大家一起交流学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法基础】数学知识

质数 质数的判定 866. 试除法判定质数 - AcWing题库 时间复杂度是logN #include<bits/stdc.h> using namespace std; int n; bool isprime(int x) {if(x<2) return false;for(int i2;i<x/i;i){if(x%i0) return false;}return true; } signed main() {cin>&g…

SpringBoot+MyBatisPlus+MySQL不能储存(保存)emoji表情问题解决

1.之前在学习过程中不知道utf8和utf8mb4的区别&#xff0c;也没过多去了解&#xff0c;直到最近设置的数据库编码全是utf8后发现问题所在了&#xff0c;居然不能储存表情包&#xff01;&#xff01;&#xff01;整个人直接傻了&#xff0c;后面知道了utf8是3字节不能储存表情&a…

SadTalker 让图片说话

参考&#xff1a;https://github.com/OpenTalker/SadTalker 其他类似参考&#xff1a;https://www.d-id.com/ 输入图片加音频产生2d视频 安装使用 1、拉取github&#xff0c;下载对应安装库 2、下载对应模型baidu网盘 新建checkpoints&#xff0c;把下载sadtalker里模型拷贝进…

如何在Gazebo中实现多机器人编队仿真

文章目录 前言一、仿真前的配置二、实现步骤1.检查PC和台式机是否通讯成功2.编队中对单个机器人进行独立的控制3、对机器人进行编队控制 前言 实现在gazebo仿真环境中添加多个机器人后&#xff0c;接下来进行编队控制&#xff0c;对具体的实现过程进行记录。 一、仿真前的配置…

JAVAEE初阶相关内容第十二弹--多线程(进阶)

目录 一、JUC的常见类 1、Callable接口 1.1callable与runnable 1.2代码实例 &#xff08;1&#xff09;不使用Callable实现 &#xff08;2&#xff09;使用Callable实现 1.3理解Callable 1.4理解FutureTask 2、ReentrantLock 2.1ReentrantLock的用法 2.2ReentrantLoc…

【面试题】Js数组去重都有哪些方法?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 表妹一键制作自己的五星红旗国庆头像&#xff0c;超好看 1. indexOf 定义&#xff1a; indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置…

springboot整合sentinel完成限流

1、直入正题&#xff0c;下载sentinel的jar包 1.1 直接到Sentinel官网里的releases下即可下载最新版本&#xff0c;Sentinel官方下载地址&#xff0c;直接下载jar包即可。不过慢&#xff0c;可能下载不下来 1.2 可以去gitee去下载jar包 1.3 下载完成后&#xff0c;进行打包…

【办公小神器】:快速批量转换Word、Excel、PPT为PDF脚本!

文章目录 ✨哔哩吧啦✨脚本使用教程✨温馨小提示设置&#x1f4da;资源领取 专栏Python零基础入门篇&#x1f525;Python网络蜘蛛&#x1f525;Python数据分析Django基础入门宝典&#x1f525;小玩意儿&#x1f525;Web前端学习tkinter学习笔记Excel自动化处理 ✨哔哩吧啦 前…

[pai-diffusion]pai的easynlp的clip模型训练

EasyNLP带你玩转CLIP图文检索 - 知乎作者&#xff1a;熊兮、章捷、岑鸣、临在导读随着自媒体的不断发展&#xff0c;多种模态数据例如图像、文本、语音、视频等不断增长&#xff0c;创造了互联网上丰富多彩的世界。为了准确建模用户的多模态内容&#xff0c;跨模态检索是跨模态…

Ctfshow web入门 代码审计篇 web301-web310 详细题解 全

CTFshow 代码审计 web301 下载的附件的目录结构如下&#xff1a; 开题后界面&#xff0c;看见输入框&#xff0c;感觉是sql。 大概浏览一遍源码&#xff0c;我们可以发现在checklogin.php文件中有无过滤的SQL语句&#xff0c;SQL注入没得跑了。 这题SQL注入有三种做法。 方法一…

Linux:GlusterFS 集群

GlusterFS介绍 1&#xff09;Glusterfs是一个开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的结合物理的,虚拟的和云资源去体现高可用和企业级的性能存储. 2&#xff09;Glusterfs通过TCP/IP或InfiniBand RDMA网络链…

Everything + Cpolar,打造在线搜索的终极神器

文章目录 前言1. 下载安装注册cpolar2. Everything安装和设置2.1 进入Everything官网进行下载2.2 对Everything文件进行设定 3. 创建cpolar内网穿透隧道4. 公网访问测试Everything5. 固定连接公网地址 前言 你还在用Windows资源管理器自带的搜索工具来搜索文件吗&#xff1f;这…

轮换对称性

二重积分 普通对称性–D关于 y x yx yx对称&#xff1a; ∬ D f ( x , y ) d σ { 2 ∬ D 1 f ( x , y ) d σ f ( x , y ) f ( y , x ) 0 f ( x , y ) − f ( y , x ) \iint_{D}f(x,y)d\sigma\begin{cases} 2\iint_{D_1}f(x,y)d\sigma\ \ \ \ \ \ f(x,y)f(y,x) \\ 0 \ \…

OpenStack创建云主机并连接CRT

文章目录 OpenStackT版创建云主机并连接CRT命令行操作&#xff08;1&#xff09;创建镜像&#xff08;2&#xff09;创建实例&#xff08;3&#xff09;创建网络创建内网创建外网 &#xff08;4&#xff09;创建安全组&#xff08;5&#xff09;创建路由&#xff08;6&#xff…

1952-2018年中国各省份人均GDP数据(消涨处理)

1952-2018年中国各省份人均GDP数据&#xff08;消涨处理&#xff09; 1、时间&#xff1a;1952-2018年 2、范围&#xff1a;30省市 3、指标&#xff1a;人均GDP 4、来源&#xff1a;《新中国60周年统计汇编》和各省年鉴 5、指标解释&#xff1a; 过程为环比人均GDP指数转…

YSA Toon (Anime/Toon Shader)

这是一个Toon着色器/Cel阴影着色器,用于Unity URP 此着色器的目的是使角色或物体阴影实时看起来尽可能接近真实的动画或卡通效果 可以用于游戏,渲染,插图等 着色器特性,如:面的法线平滑、轮廓修复、先进的边缘照明、镜面照明、完全平滑控制 这个文档包括所有的功能https:/…

Eclipse ABAP ADT 集成详细安装教程

最近看到网上有个源码使用CDS做的&#xff0c;然后看了一下原来还可以用eclipse&#xff0c;趁热打铁&#xff0c;试了一把&#xff0c;最后成功了&#xff0c;中间可能会有一些报错&#xff0c;可以自己慢慢解决&#xff0c;大概就是这样的。 SAP的开发&#xff0c;有三种开发…

Java————List

一 、顺序表和链表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c; 常见的线性表&#xff1a;顺序表、链表、栈、队列… 线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直…

微信小程序与idea后端如何进行数据交互

交互使用的其实就是调用的req.get(url)方法 进行路径访问&#xff0c;你要先保证自己的springboot项目已经成功运行了&#xff1a; 如下&#xff1a; 如何交互的&#xff1f; 微信小程序&#xff1a;如下为index.js页面 在onLoad()事件中调用方法Project.findAllCities() 要…

贝叶斯滤波计算4d毫米波聚类目标动静属性

机器人学中有些问题是二值问题&#xff0c;对于这种二值问题的概率评估问题可以用二值贝叶斯滤波器binary Bayes filter来解决的。比如机器人前方有一个门&#xff0c;机器人想判断这个门是开是关。这个二值状态是固定的&#xff0c;并不会随着测量数据变量的改变而改变。就像门…