javaSE 数字处理类
文章目录
- 一·数字格式化
- 二·数字运算
- (1)Math类
- (2).常用的数学方法
- 1.三角函数方法
- 2.指数函数方法
- 3.取整函数方法
- (4)取最大值,最小值,绝对值函数方法
- 三·随机数
- (1).Math.random()方法
- (2).Random类
- 四·大数字运算
- (1).BigInteger
- (2).BigDecimal
一·数字格式化
数字格式化操作主要针对的是浮点型数据,包括double型和float型数据。在java中,使用java.text.DecimalFormat格式化数字
没有格式化的数据遵循如下原则:
1.如果数据绝对值大于0.001并且小于10000000(107),使用常规小数形式表示
2.如果数据绝对值小于0.001并且大于10000000,使用科学记数法表示
由于上述的输出格式不能满足解决实际问题的要求,通常将结果格式化为指定形式后输出。在java中可以使用DecimalFormat类进行格式化操作
DecimalFormat类是NumberFormat的一个子类,用于格式化十进制数字。他可以将一些数字格式化为整数,浮点数,百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一般可以在实例化DecimalFormat对象时传递数字格式,也可以通过DecimalFormat类中的applyPattern()方法来实现数字格式化。
当格式化数字时,在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照一定的特殊字符规则进行匹配。
字符 | 说明 |
---|---|
0 | 代表阿拉伯数字,使用特殊字符"0"表示数字的一位阿拉伯数字,如果该位不存在数字 |
# | 代表阿拉伯数字,使用特殊字符“#”表示数字的一位阿拉伯数字,如果该位存在数字,则显示字符;否则不显示 |
. | 小数分隔符或货币小数分隔符 |
- | 负号 |
, | 分组分隔符 |
E | 分隔科学计数法中的尾数和指数 |
% | 本符号放置在数字的前缀或后缀,将数字乘以100显示为百分数 |
\u2030 | 本符号放置在数字的前缀或后缀,将数字乘以1000显示为千分数 |
\u00A4 | 本符号放置在数字的前缀或后缀,作为货币记号 |
’ | 本符号为单引号,当上述特殊字符出现在数字中时,应为特殊符号添加单引号,系统会将此符号视为普通符号处理 |
import java.text.DecimalFormat;public class Demo {static public void simpleformat(String pattern,double value){DecimalFormat f=new DecimalFormat(pattern);System.out.println(value+"通过"+pattern+"格式化为"+f.format(value));}static public void UseApplyPatten(String pattern,double value){DecimalFormat f=new DecimalFormat();f.applyPattern(pattern);System.out.println(value+"通过"+pattern+"格式化为"+f.format(value));}public static void main(String[] args) {//Scanner scan=new Scanner(System.in);//float f=scan.nextFloat();simpleformat(",###.###",123456.789); //取三位小数格式 整数部分按三位分隔 等同于"###,###.###"simpleformat("###,##.###",123456.789); //取三位小数格式 整数部分按二位分隔simpleformat("###,##.##",123456.779); //取二位小数格式(有进位) 整数部分按二位分隔simpleformat("000000000.###kg",123456.789); //取三位小数格式 然后再嵌套文本"kg"格式simpleformat("000000.000",123.78); //取三位小数格式UseApplyPatten("#.###%",0.789); //先乘100再取百分比格式UseApplyPatten("#.##",123456.789); //取两位小数格式 取两位后进位UseApplyPatten("0.00\u2030",0.789); //先乘1000再取两位小数的千分比格式}
}输出结果:
123456.789通过,###.###格式化为123,456.789
123456.789通过###,##.###格式化为12,34,56.789
123456.779通过###,##.##格式化为12,34,56.78
123456.789通过000000000.###kg格式化为000123456.789kg
123.78通过000000.000格式化为000123.780
0.789通过#.###%格式化为78.9%
123456.789通过#.##格式化为123456.79
0.789通过0.00‰格式化为789.00‰
以"0"特殊字符构成的模板进行格式化时,当数字某位不存在时,将显示0;以"#"特殊字符构成的模板进行格式化操作时,格式化后的数字位数与数字本身位数一致
在DecimalFormat类中除了可通过格式化模板来格式化数字外,还可以使用一些特殊方法对数字进行格式化设置
DecimalFormat myFormat=new DecimalFormat();
myFormat.setGroupingSize(2); //设置将数字分组大小
myFormat.setGroupingUsed(true); //设置是否支持分组
import java.text.DecimalFormat;public class Demo {public static void main(String[] args) {DecimalFormat myFormat=new DecimalFormat();myFormat.setGroupingSize(2);String s=myFormat.format(123456.789);System.out.println("将数字以每两个数字分组:"+s);myFormat.setGroupingUsed(false);System.out.println("不允许数字分组:"+myFormat.format(123456.789));}
}输出结果:
将数字以每两个数字分组:12,34,56.789
不允许数字分组:123456.789
二·数字运算
(1)Math类
Math提供了很多数学函数方法,主要包括三角函数方法,指数函数方法,取整函数方法,取最大值,最小值以及平均值函数方法,对数函数方法,平方根方法等,还提供一些常用的数学常量,如PI,E等
这些方法都被定义为static形式
以如下方法调用
Math.数学方法
常量调用
Math.PI;
Math.E;
(2).常用的数学方法
1.三角函数方法
方法 | 功能 |
---|---|
public static double sin(double a) | 返回角的三角正弦 |
public static double cos(double a) | 返回角的三角余弦 |
public static double tan(double a) | 返回角的三角正切 |
public static double asin(double a) | 返回角的三角反正弦 |
public static double acos(double a) | 返回角的三角反余弦 |
public static double attan(double a) | 返回角的三角反正切 |
public static double toRadians(double angdeg) | 将角度转换为弧度 |
public static double toDegrees(double angrad) | 将弧度转换为角度 |
参数设置为double型。,以弧度代替角度实现,如1o 等于π/180弧度,180o 可以使用π弧度来表示
需要注意的是,角度与弧度的转换通常是不精确的
public class Demo2 {public static void main(String[] args) {System.out.println("90度正弦值:"+Math.sin(Math.PI/2));System.out.println("60度正切值:"+Math.tan(Math.PI/3));System.out.println("120度的弧度值:"+Math.toRadians(120.0));System.out.println("π/2角度值:"+Math.toDegrees(Math.PI/2)); }
}输出结果:
90度正弦值:1.0
60度正切值:1.7320508075688767
120度的弧度值:2.0943951023931953
π/2角度值:90.0
2.指数函数方法
方法 | 功能 |
---|---|
public static double exp(double a) | 得到ea |
public static double log(double a) | 取自然对数,lna |
public static double log10(double a) | 取以10为底的对数 |
public static double sqrt(double a) | 用于取a的平方根 |
public static double cbrt(double a) | 用于取a的立方根 |
public static double pow(double a,double b) | 用于取a的b次方,ab |
3.取整函数方法
方法 | 功能 |
---|---|
public static double ceil(double a) | 返回大于等于参数的最小整数 |
public static double floor(double a) | 返回小于等于参数的最大整数 |
public static double rint(double a) | 返回与参数最接近的整数,如果两个同为整数且同样接近,则结果取偶数 |
public static int round(float a) | 返回与参数最近的整数 |
public static long round(double a) | 返回与参数最近的整数,然后强制转换为长整型 |
如1.5
1.0和2.0距离数1.5都是0.5个单位长度,返回偶数2.0
public class Demo2 {public static void main(String[] args) {System.out.println(Math.ceil(5.2));System.out.println(Math.floor(2.5));System.out.println(Math.rint(2.7));System.out.println(Math.rint(2.5));System.out.println(Math.round(3.4f)); //float要加fSystem.out.println(Math.round(2.5));}
}
输出结果:
6.0
2.0
3.0
2.0
3
3
(4)取最大值,最小值,绝对值函数方法
方法 | 功能 |
---|---|
public static double max(double a,double b) | 取a与b之间的最大值 |
public static int min(int a,int b) | 取a与b之间的最小值,参数为整型 |
public static long min(long a,long b) | 取a与b之间的最小值,参数为长整型 |
public static float min(float a,float b) | 取a与b之间的最小值,参数为浮点型 |
public static double min(double a,double b) | 取a与b之间的最小值,参数为双精度型 |
public static int abs(int a) | 返回整型参数的绝对值 |
public static long abs(long a) | 返回长整型参数的绝对值 |
public static float abs(float a) | 返回浮点型参数的绝对值 |
public static double abs(double a) | 返回整型参数的绝对值 |
三·随机数
(1).Math.random()方法
Math类存在一个random()方法,用于产生随机数字/这个方法默认生成大于等于0.0且小于1.0的double型随机数。虽然Math.random()方法只可以产生0~1之间的double型数字,但只要在Math.random()语句上稍加处理,就可以使用这个方法产生任意范围的随机数
(int)(Math.random()*n) //返回大于等于0且小于n的随机数
m+(int)(Math.random()*n) //返回大于等于m且小于m+n(不包括m+n)的随机数
public class Demo2 {public static int getNum(double num1,double num2){int s=(int)num1+(int)(Math.random()*(num2-num1));if(s%2==0)return s;elsereturn s+1;}public static void main(String[] args) {System.out.println("任意一个2~50之间的偶数:"+getNum(2,50));}
}
也可以产生随机字符
(char)('a'+Math.random()*('z'-'a'+1));
(2).Random类
除了Math.random可以获得随机数之外,Random类也可以产生随机数
Random r=new Random()
以这种方式实例化对象时,java编译器会以系统当前时间作为随机生成器的种子。因为每时每刻时间不同,所以产生随机数不同。但是如果运行速度太快,也会产生两次运行结果相同的种子。
所以可以在实例化Random类对象时,设置随机数生成器种子
Random r=new Random(seedValue); //seedValue:随机数生成器的种子
在Random类中提供了获得各种数据类型随机数的方法
方法 | 功能 |
---|---|
pulic int nextInt() | 返回一个随机整数 |
pulic int nextInt(int n) | 返回一个大于等于0且小于n的随机整数 |
public long nextLong() | 返回一个随机长整型值 |
public boolean nextBoolean() | 返回一个随机布尔值 |
public float nextFloat() | 返回一个随机浮点数值 |
public double nextDouble() | 返回一个随机双精度值 |
public double nextGaussian() | 返回一个概率密度为高斯分布的双精度值 |
四·大数字运算
(1).BigInteger
BigInteger类型的数字范围较Integer类型的数字范围要大得多。
Integer是int的包装类,int的最大值为231 -1,如果要计算更大的数字,使用Integer数据类型就无法实现了,所以用BigInteger类来处理更大的数字。BigInteger支持任意精度的整数,也就是说,在运算中BigInteger类型可以准确地表示任何大小的整数值而不会丢失信息
在BigInteger类中封装了多种操作,除了基本的加,减,乘,除之外,还提供了绝对值,相反数,最大公约数以及判断是否为质数等操作
BigInteger类有很多构造函数,最直接的一种方式是参数以字符串形式代表要处理的数字。
public BigInteger(String value) //value是十进制字符串
BigInteger b=new BigInteger("2");
下面列举BigInteger类中常用的几种运算方法
方法 | 功能 |
---|---|
public BigInteger add(BigInteger val) | 做加法运算 |
public BigInteger subtract(BigInteger val) | 做减法运算 |
public BigInteger multiply(BigInteger val) | 做乘法运算 |
public BigInteger divide(BigInteger val) | 做除法运算 |
public BigInteger remainder(BigInteger val) | 做取余运算 |
public BigInteger[] divideAndRemainder(BigInteger val) | 用数组返回余数和商,结果数组中第一个值为商,第二个值为余数 |
public BigInteger pow(int exponent) | 进行取参数的exponent次方的操作 |
public BigInteger negate() | 取相反数 |
public BigInteger shiftLeft(int n) | 将数字左移n位,如果n为负数,做右移操作 |
public BigInteger shiftRight(int n) | 将数字右移n位,如果n为负数,做左移操作 |
public BigInteger and(BigInteger val) | 做与操作 |
public BigInteger or(BigInteger val) | 做或操作 |
public BigInteger compareTo(BigInteger val) | 做数字比较操作 |
public boolean equals(Object x) | 当参数x是BigInetger类型的数字并且数值相等时,返回ture |
public BigInteger min(BigInteger val) | 返回较小的数值 |
public BigInteger max(BigInteger val) | 返回较大的数值 |
(2).BigDecimal
BigDecimal和BigInteger都能实现大数字的运算,不同的是BigDecimal加入小数的概念。一般float和double型数据只可以用来做科学计算或工程计算,但由于在商业计算中要求数字精度比较高,所以要用到BigDecimal类。BigDecimal类支持任何精度的定点数,可以用它来精确计算货币值
在BigDecimal类中常用的两个构造方法
public BigDecimal(double val) //实例化时将双精度型转换为BigDecimal类
public BigDecimal(String val) //实例化时将字符串形式转换为BigDecimal类
BigDecimal类型的数字可以用来做超大浮点数的运算,如加,减,乘,除等。在所有的运算中,除法是最复杂的,因为在除不尽的情况下末位小数点的处理是需要考虑的。
方法 | 功能 |
---|---|
public BigDecimal add(BigDecimal val) | 做加法操作 |
public BigDecimal subtract(BigDecimal val) | 做减法操作 |
public BigDecimal multiply(BigDecimal val) | 做乘法法操作 |
public BigDecimal divide(BigDecimal val,int scale,int roundingMode) | 做除法操作,3个参数分别代表除数,商的小数后的位数,近似处理模式 |
BigDecimal类中的divide()方法有多种配置,用于返回商末位小数点的处理,模式的名称与含义如下
模式 | 含义 |
---|---|
BigDecimal.ROUND_UP | 商的最后一位如果大于0,则向前进位,正负数都如此 |
BigDecimal.ROUND_DOWN | 商的最后一位无论是什么数字,都省略 |
BigDecimal.ROUND_CEILING | 商如果是正数,按照ROUND_UP模式处理,如果是负数,按照ROUND_DOWN模式处理。这两种模式的处理都会使近似值大于等于实际值 |
BigDecimal.ROUND_FLOOR | 与ROUND_CEILING模式相反。商如果是正数,按照ROUND_DOWN模式处理,如果是负数,按照ROUND_UP模式处理。这两种模式的处理都会使近似值小于于等于实际值 |
BigDecimal.ROUND_HALF_DOWN | 对商进行四舍五入操作,如果商最后一位小于等于5,则舍弃,如果最后一位大于5,则做进位操作。如7.5≈7 |
BigDecimal.ROUND_HALF_UP | 对商进行四舍五入操作,如果商最后一位小于5,则舍弃,如果最后一位大于等于5,则做进位操作。如7.5≈8 |
BigDecimal.ROUND_HALF_EVEN | 如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果倒数第二位为偶数,则按照ROUND_HALF_DOWN处理。如:7.5≈8,8.5≈8 |
javaSE 数字处理类相关推荐
- java中math类的作用_Java开发知识之Java的数字处理类Math类
Java开发知识之Java的数字处理类Math类 一丶Java.text.DecimalFormat类与NumberFormat类 首先 Java.text.DecimalFormat指的是Decim ...
- 9.数字处理类(遗留)
我这些学习笔记,记录的都是我自己认为的知识点,可能以后再看的时候还要翻书,但是可以用来定位到准确的书中示例的位置,减少翻书重找的时间,利于自身知识体系的搭建. se ...
- java对数字的处理_[java初探10]__关于数字处理类
前言 在我们的日常开发过程中,我们会经常性的使用到数字类型的数据,同时,也会有众多的对数字处理的需求,针对这个方面的问题,在JAVA语言中.提供解决方法的类就是数字处理类 java中的数字处理类包括: ...
- JavaSE常用类day08
JavaSE常用类day08 基本类型和字符串之间的转换 8种包装类提供不同类型间的转换方式: Number父类中提供的6个共性方法 parseXXX()静态方法 package category.D ...
- 用JAVA编写一个控制台程序,实现学生注册功能,要求有数组、字符串、循环、包装类、数字处理类
这是基于作业,为了完成要求而拼凑而成的管理系统.学生人数用到了一维数组,输入学生信息用到了字符串,循环就不多解释了,包装类使用了equalas,最后为了拼凑出数字处理类的功能,勉强想到了生成验证码用R ...
- Java从入门到精通 第九章 数字处理类
Java从入门到精通 第九章 数字处理类 一.数字格式化 二.数学运算 1)Math类 2)常用数学运算方法 三.随机数 1)Math.random()方法 2)Random类 四.大数字运算 1)B ...
- JAVA数字处理类使用2
尝试开发一个程序: 定义一个求圆面积的方法,其中以圆半径作为参数,将计算结果保留5位小数. import java.text.DecimalFormat;/*** 尝试开发一个程序:* 定义一个求圆面 ...
- JAVASE——File类
文章目录 简介 注意点: 实现代码 判断文件是否存在 以文件的形式创建 以目录的形式创建 补充 如何获取父路径 第一种 第二种 如何获取绝对路径 获取文件名 判断是否是一个目录: 判断是否是一个文件: ...
- Java有哪些常用的转换类,JavaSE——常用类、类型转换
声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 不可变字符串String可以让它可变,只是不可变是为了能进行 ...
最新文章
- facebox目标检测改进
- 文件服务器传输,文件服务器传输
- Centos 6.5 搭建NFS服务器笔记
- linux node 文件存放目录_Linux文件与目录结构
- TCP/IP的基本介绍
- Spring MVC @RequestMapping注解详解
- troubleshoot之:分析OutOfMemoryError异常
- Node的底层调用你知道吗?
- php表格合并_如何在php生成的表中合并单元格?
- 如何调用common.js
- 完美解决onenote同步速度慢(修改hosts文件)以及如何取得文件修改权限
- 安卓Vitamio播放课程视频
- CL210管理存储--实现块存储
- ncbi查找目的基因序列_如何获得基因序列——在NCBI中查找目的基因实例.PDF
- 【win10专业版】新建账户激活 Office 2019
- 【2】非线性方程求解函数vpasolve
- 【菜鸟窝出品】 python的变量和逻辑基础(python数据分析入门)
- 如何减少页面的重绘和回流(14)
- 信息安全之操作系统安全防护技术
- 导航栏的返回文字修改
热门文章
- 一、软考·系统架构师——计算机基础
- gwas之一年两点blup值以及遗传力的计算
- 搭建MarkDown文档整理对外展示网站
- oppo计算机打不开怎么回事,《oppo手机文件夹打不开怎么办?》 所有表格打不开怎么办...
- 折线图转成光滑曲线并求拐点
- 王红梅《算法设计与分析(第3版)》部分课后实验代码
- 品牌小红书kol推广怎么选?掌握这几点,让ta的效果最大化
- 高尔夫模拟器,极致的室内高尔夫球运动体验!
- NFT Insider #50:汇丰银行进驻The Sandbox,YGG与MetalCore达成合作
- 令 P​i 表示第 i 个素数。现任给两个正整数 M≤N≤10​4​​ ,请输出 P​M到 PN​​ 的所有素数。来源PAT