Java中数字相关的类有哪些?Nuber数字类和Math数学类详解
前言
我们在解决实际问题时,会经常对数字、日期和系统设置进行处理,比如在我们的代码中,经常会遇到一些数字&数学问题、随机数问题、日期问题和系统设置问题等。
为了解决这些问题,Java给我们提供了多个处理相关问题的类,比如Number类、Math类、Random类、BigInteger类、BigDecimal类、Date类、System类等。 接下来我们会利用几篇文章,给大家详细地介绍这些与数学、日期、系统处理等相关的类,本篇文章我们先从Number数字类和Math数学类学起。
全文大约 【3000】字, 不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图,让你更好地理解和运用文中的技术概念,并可以给你带来具有足够启迪的思考......
一. Number类
1. 内容回顾
在学习Java里的Math数学类之前,我们再来回顾一下之前学习过的Number数字类。
我们知道,Java里的数据类型可以分为引用类型和基本类型,其中基本类型有3大类8个子类,如下图所示:
实际上,无论是整数型还是浮点型,它们都是数值型,当我们定义数值型变量时,都是直接操作的数字。
而在实际开发中,我们还经常遇到需要使用对象,而不是使用内置数据类型的情况。所以为了解决这个问题,Java又为每一个内置的基本数据类型提供了对应的包装类。其中,6个数值型对应的包装类(Byte、Short、Integer、Long、Float、Double),都是抽象类Number的子类。 在基本类型和包装类型之间,会涉及到装箱和拆箱的操作,大家可以回顾一下这是怎么回事,如果你想不起来,请回过头来看看之前的文章哦。
2. 数字格式化
我们在使用数字时,很多时候并不只是简单地原文展示,还要对这些数字进行各种格式化操作,比如设置小数点后几位、数字后带%号或货币符号等。这种使用场景,在解决实际问题时是很普遍的。但我们不用在数字后手动添加,Java自带了一个DedmalFormat类,可以对数字进行格式化处理。
DecimalFormat是NumberFormat的子类,用于格式化十进制数字,该类包含一个模式和一组符号,这些常用的符号含义如下:
符号 | 说明 |
---|---|
0 | 显示数字,如果位数不够则补0 |
# | 显示数字,如果位数不够不发生变化 |
. | 小数分隔符 |
- | 减号 |
, | 组分隔符 |
E | 分隔科学记数法中的尾数和小数 |
% | 前缀或后缀,乘以 100 后作为百分比显示 |
? | 乘以 1000 后作为千进制货币符显示。用货币符号代替。如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符 |
接下来我们通过一个案例来演示DecimalFormat的用法:
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和PI
System.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;
public class Demo03 {
public static void main(String[] args) {
//求整运算
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字...");
//num=10.5
double 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/2
System.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);
三. 结语
至此我们就把与数字、数学、随机数等相关的类给大家介绍完了,本节内容没有特别难的地方,主要是需要大家记住几个常用方法即可。
Java中数字相关的类有哪些?Nuber数字类和Math数学类详解的更多相关文章
- 在java中,List是个接口,那实现List接口的类有哪些,有什么区别?
在java中,List是个接口,那实现List接口的类有哪些,有什么区别? 解答: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引 ...
- 谈谈java中静态变量与静态方法在有继承关系的两个类中调用
谈谈java中静态变量与静态方法在有继承关系的两个类中调用 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量和静态方法在有继承关系的两个类中的问题测试 ...
- ClassLoader Java中类加载出现在哪个阶段,编译期和运行期? 类加载和类装载是一样的吗
1.ClassLoader Java中类加载出现在哪个阶段,编译期和运行期? 类加载和类装载是一样的吗? :当然是运行期间啊,我自己有个理解误区,改正后如下:编译期间编译器是不去加载类的,只负责编译而 ...
- Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解
Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...
- 第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解
第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解 一. 引言 上两节介绍了构造方法的语法及参数,说明了构造方法是Python的类创建实例后首先执行的方法,并说明如果类 ...
- “全栈2019”Java第七十三章:外部类里多个静态非静态内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Sql Server 中 GAM、SGAM、PAM、IAM、DCM 和 BCM 的详解与区别
Sql Server 中 GAM.SGAM.PAM.IAM.DCM 和 BCM 的详解与区别 GAM.SGAM.PAM.IAM.DCM 和 BCM 都是 SQL Server 中用来管理空间分配的 ...
- Math 数学类
/* Math 数学类, 主要是提供了很多的数学公式. abs(double a) 获取绝对值 ceil(double a) 向上取整 floor(double a) 向下取整 round(float ...
- Java中使用google.zxing快捷生成二维码(附工具类源码)
移动互联网时代,基于手机端的各种活动扫码和收付款码层出不穷:那我们如何在Java中生成自己想要的二维码呢?下面就来讲讲在Java开发中使用 google.zxing 生成二维码. 一般情况下,Java ...
随机推荐
- weblogic session timed out
How to Configure Session Timeout in Weblogic Server (WLS) ?
- ACM 的正确入门方式是什么?
作者:数学lover 链接:https://www.zhihu.com/question/51727516/answer/127265733 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权, ...
- Python项目案例开发从入门到实战-1.5Python文件的使用
Python对文件的操作通常按照三个步骤进行: un 使用open()函数打开(或建立)文件,并返回一个file对象. deux 使用file对象的读写方法对文件进行读写操作. trois 使用fil ...
- ImageUtils excel 中 emf 转图片(解决图片上部分显示不全问题)图片转文字
excel 中ActiveX 工具 中的textbox ,以及公式 解析后为emf 图片, emf 转图片(解决图片上部分显示不全问题) 图片转文字 /*********************** ...
- Python:logging简要版
日志等级(从低到高):DEBUG < INFO < WARNING < ERROR < CRITICAL 1.调试时,可记录DEBUG.INFO类的信息 2.投入使用,建议使用 ...
- nginx配置https详细过程
准备工作 需要先准备好你域名对应的证书和私钥,也就是cert证书和key.我部署是很常见的ng+tomcat双层配置,ng作为前端的代理,所以tomcat就不需要自己处理https,ng作为代理以ht ...
- Android笔记--文本显示
文本显示 设置文本内容 方式一: 在.xml文件中利用android:text属性设置文本 新创建一个.xml文件示范一下: 方式二: 在java代码中调用文本视图对象的setText方法设置文本 还 ...
- 11.3 shtctl的指定省略(harib08c)
ps:能力有限,若有错误及纰漏欢迎指正.交流 11.3 shtctl的指定省略(harib08c) 对bootpack.h做了如下改动 struct SHEET { unsigned char *bu ...
- 刘勇智:一码通缺陷分析与架构设计方案丨声网开发者创业讲堂 Vol.02
本文内容源自「声网开发者创业讲堂 Vol.02」的演讲分享,分享讲师为 Thoughtworks 专家级咨询师刘勇智.大家可以点击此链接,观看视频回放以及下载讲师 PPT. 从去年年底到现在,随着疫情 ...
- 使用python自动监控程序运行过程数据
操作系统 :CentOS 7.6.1810_x64 Python 版本 : 2.7.5 一.背景描述 工作中会遇到需要监控程序运行过程数据的情况,比如定时执行监控的cmd并记录执行结果,本文提供一种实 ...