[java初探10]__关于数字处理类
- 前言
在我们的日常开发过程中,我们会经常性的使用到数字类型的数据,同时,也会有众多的对数字处理的需求,针对这个方面的问题,在JAVA语言中.提供解决方法的类就是数字处理类
- java中的数字处理类包括:
- DecimalFormat类,用于格式化数字
- Math类,为各种数学计算提供了工具方法
- Random类,为java处理随机数问题提供了各种方法
- BigInteger类与BigDecimal类,为java处理大数字提供了相应的数学运算操作方法.
- DecimalFormat类
数字的格式化在解决实际问题时,使用非常普遍,如超市的商品价格,银行的余额显示,都需要对小数的精度有特定的要求,java主要对浮点数进行格式化.JAVA语言就是通过DecimalFormat类来对其进行格式化操作的.
DecimalFromat类是继承与NumberFormat类的,NumberFormat类又是Format类的子类,这里我们就可以很明显的观察到java类的继承机制是如何在Java类库中存在的.
public class DecimalFormat extends NumberFormat {
DecimalFormat类用以格式化十进制数字.他可以将一些数字格式化为整数,浮点数,百分数等.通过该类可以为要输出的数字加上单位或控制数字的精度.一般通过实例化DecimalFormat对象是传递数字格式,也可以通过类中的applyPattern方法来实现数字的格式化.
需要注意的是:
在格式化数字的时候,DecimalFormat类中使用了一些特殊字符构成一个格式化的模版,使数字按照一定的特殊字符来进行匹配.
- 格式化方法体的代码
// 第一种格式化方法,直接通过构造方法传入格式控制参数patten.
private void NumFormating(String patten, double adouble){ // 传入两个参数,第一个控制格式,第二个为传入的数值.
DecimalFormat format = new DecimalFormat(patten);
System.out.println(format.format(adouble)); // 通过format方法格式化参数adouble
}
// 第二种格式化方法,通过类的方法applyPattern方法传入格式控制参数patten
private void NumFormating1(String patten,double adouble){
DecimalFormat format = new DecimalFormat();
format.applyPattern(patten);
System.out.println(format.format(adouble)); // 通过format方法,格式化参数adouble
}
- 测试一下:
在主方法中通过实例化对象调用我们编写的格式化方法来对不同的特殊字符组进行示例输出:
public static void main(String[] args) {
Sty_DigitalProcessing digitalProcessing = new Sty_DigitalProcessing();
digitalProcessing.NumFormating("000,000.0000",12345.67);
digitalProcessing.NumFormating1("###,###.####",12345.67);
digitalProcessing.NumFormating("###,###.####kg",12345.67);
System.out.println();
digitalProcessing.NumFormating("#.###%",0.345);
digitalProcessing.NumFormating("0.000%",0.345);
System.out.println();
digitalProcessing.NumFormating("0.0000\u2030",0.123456);
digitalProcessing.NumFormating("#.####\u2030",0.123456);
System.out.println();
digitalProcessing.NumFormating("000,000,000.0000\u00A4",1234567.89);
digitalProcessing.NumFormating("###,###,###.##'#'",1234567.89);
}
- 结果
我们可以很明显的看出来,0和#之间的区别,前者,在位数不足时会补零,后者则不会补零.通常情况下,我们知道,一般是不会在数字前补零的,补零的情况通常出现在小数后面.
- Math类
Math类主要给我们提供了一些数学上的众多运算方法,我们知道,一个科学计算器是具有着非常强大功能的,而我们最基本的运算符只有"+,-,*,/".所以很多运算方法,在java语言中,都是是通过Math类实现的和提供的.
同时,Math类也提供有众多的常量定义,因为Math中的方法是通用的,可以适用于程序的任何时候任何地方的数学运算中,所以Math类中的方法都被构建为静态的方法,使得他们都可以直接被调用.
Math中常用的方法
Math中常用的数学运算方法有很多,其大致可以分为4类.三角函数方法,指数函数方法,取整方法以及取最大最小值和绝对值函数方法.三角函数方法
它们都是静态的,所以可以直接通过类名.方法名调用.
System.out.println(Math.sin(subtense)); // 返回正弦
System.out.println(Math.cos(subtense)); // 返回余弦
System.out.println(Math.tan(subtense)); // 返回正切
System.out.println(Math.asin(subtense)); // 返回一个值的反正弦
System.out.println(Math.acos(subtense)); // 返回一个值的反余弦
System.out.println(Math.atan(subtense)); // 返回一个值的反正切
System.out.println(Math.toRadians(angdeg)); // 将角度转换为弧度
System.out.println(Math.toDegrees(angdeg)); // 将弧度转换为角度
- 指数函数方法
// 指数函数方法
private void styindex(double adouble,double adouble1){
System.out.println(Math.exp(adouble)); // 用于获取e的a次方
System.out.println(Math.log(adouble)); // 用于取自然对数,lna的值
System.out.println(Math.log10(adouble)); // 用于取底数为10的整数
System.out.println(Math.sqrt(adouble)); // 用于取a的平方根,其中a的值不能为负值.
System.out.println(Math.cbrt(adouble)); // 用于取a的立方根
System.out.println(Math.pow(adouble,adouble1)); // 用于取a的b次方
}
- 取整函数方法
private void styAdjustment(double adouble,float afloat){
System.out.println(Math.ceil(adouble)); // 返回大于等于参数的最小整数.
System.out.println(Math.floor(adouble)); // 返回小于等于参数的最大整数.
System.out.println(Math.rint(adouble)); // 返回与参数最接近的整数(若为0.5取偶数,即加一)
System.out.println(Math.round(adouble)); // 将参数家上0.5返回与参数最近的整数
System.out.println(Math.round(afloat)); // 将参数加上0.5后返回与参数最近的整数,然后强转为长整型.
}
- 取绝对值,最大最小值的函数方法
/**
* 取最大值,最小值,绝对值函数方法.
* 其方法都重载有多个类型的,满足不同类型参数的最大最小值,绝对值的获取.
*/
private void stytakequals(double adouble,double adouble1){
System.out.println(Math.max(adouble,adouble1)); // 取两个double型参数的最大值
System.out.println(Math.min(adouble,adouble1));
System.out.println(Math.abs(adouble)); // 返回double型参数的绝对值
}
- 随机数
随机数的获取有两种方式,Math.random方法给我们提供了double型随机数的获取.Random类则要更加广泛一些,可以生成任何类型的随机数.这里直接通过代码表示了:
/**
* 随机数
* Math类中有提供random方法来生产随机数.
* 该方法默认生成0.0-1.0之间的double型随机数.
* 但该方法通过处理后还是可以生成任何范围的随机数的.
* ;将该方法*n后强转为int型输出,可以得到0-n范围的随机数.
* 而m+(int)Math.random()*n,将上面的式子+m后,就可以得到m-(m+n)范围的随机数.
*/
private void styrandom(){
System.out.println(Math.random());
System.out.println((int)(Math.random()*100));
System.out.println((int)(10+Math.random()*15));
System.out.println((char)('a'+ Math.random()*('z'-'a'+1))); // 这里其实可以封装成一个获取固定范围的随机字符的方法.
}
/**
* Random类
* Random类提供各种类型随机数的构造方法
* 通过实例化对象调用.
* 比Math.random更为强大.
*/
private void styRandom(int n){ // 传入参数n 控制范围
Random random = new Random(10000);
System.out.println(random.nextInt());
System.out.println(random.nextDouble());
}
关于random seedvalue的说明参看:
- 大数字运算
- BigInteger类
BigInteger类型的数范围比Integer类的要打的多,我们知道int型最大为2^31-1;而BigInteger类支持任意大小精度的整数.并且提供一些基本的运算方法,加减乘除等,这里就不多加说明了,在BigInteger类的结构视窗中可以找到他们.
- BigInteger类
BigInteger类通过构造方法来直接将某个值转换为BigInteger类型.其构造方法有很多.
private void styBigInteger(){
BigInteger bigInteger = new BigInteger("12345678901234567890"); // 直接通过构造法方法,将值转为BigInteger型.
BigInteger bigInteger1 = new BigInteger("43534645376574567314253543");
System.out.println(bigInteger.add(bigInteger1)); // 简单的运算
}
- BigDecimal类
相对的,BigInteger类只是针对与大整数之间的运算而BigDecimal类较其更加完善的一点就是,引入了小数概念,所以BigDecimal类支持任何精度的定点数.
同样的BigDecimal类也提供有一些基本的运算方法.可以在类中查看.
BigDecimal类也是通过构造方法直接转换值的类型:
BigDecimal(double val)方法和BigDecimal(String val)方法.
BigDecimal bigDecimal = new BigDecimal(1231234345634.546756734563);
BigDecimal bigDecimal1 = new BigDecimal("124235345645765.783452352342534");
关于java数字处理类就了解到这么多了,其实其中还有很多方法都没有涉及到,关于java的类库,其中值得学习的,涵盖着各个方面的类和方法,需要在之后的不断学习的过程中不断接触了解才能够渐渐掌握,这里也仅仅只是对其中极少的一部分基本知识做总结学习.
- 后记
关于java语言的基本知识大致就学到这里了,之后会新开一个笔记系列,接着学习java的核心知识,接口,继承封装,多态,类的高级特性,异常处理,Swing窗口程序设计.等等.
可以说这才是刚刚跨入java语言的门槛吧?任务还十分艰巨,革命还需百倍努力啊!
之后我会在出一篇关于java初探阶段的整理笔记,将这段时间的学习做一个总结归纳,并整理一下笔记的顺序,捋一捋思路.
最后也祝愿大家都能够在自己前进的道路上披荆斩棘,共同进步,走向成功.
更新时间:
2019-4-10
22:06
[java初探10]__关于数字处理类的更多相关文章
- [Java初探04]__字符串(String类)相关
前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...
- [java初探05]__数组的简单认识及Arrays类的常用方法
数组是具有相同数据类型的一组数据的集合.在程序设计中,这样的集合称之为数组.数组的每个元素都具有相同的数据类型,在Java中数组也被看为一个对象. 在里,了解了数组的定义之后, 我们知道了,数组并不是 ...
- [Java初探08]__简单学习Java类和对象
前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...
- [java初探06]__排序算法的简单认识
今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. ...
- java多线程10:并发工具类CountDownLatch、CyclicBarrier和Semaphore
在JDK的并发包(java.util.concurrent下)中给开发者提供了几个非常有用的并发工具类,让用户不需要再去关心如何在并发场景下写出同时兼顾线程安全性与高效率的代码. 本文分别介绍Coun ...
- [java初探09]__关于java的包装类
前言 在Java语言的学习过程中,我们逐渐的理解了Java面向对象的思想,与类和对象的应用.但是在基本数据类型的使用上,我们无法将其定义为一个对象,通过使用对象的方法来使用它们,但是Java语言的思想 ...
- [Java初探07]__关于面向对象的简单认识
前言 类和对象,在我们学习Java语言的过程中,它们无时无刻不存在着,在我们还远未详细弄明白它们的意义之前,在我们不知不觉的下意识里,我们都会直接或间接的用到它们,这是因为Java是一门面向对象的语言 ...
- [java初探总结篇]__java初探总结
前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...
- Java之数字处理类浅析
包装类: 数据类型相对的包装类:byte---Byteshort---Shortint---Integerlong---Long float---Floatdouble---Double boolea ...
随机推荐
- Head First Servlets & JSP 学习笔记 第九章 —— 使用JSTL
JSTL1.1 不是JSP2.0规范的一部分!你能访问Servlet和JSP API 不意味着你能访问JSTL! 使用JSTL之前,需要将两个文件("jstl.jar" 和 &qu ...
- webapi postman 415 错误
https://blog.csdn.net/Intangible_moon/article/details/80183121 猜测:如果后台接口使用的是[fromBody]标签的话,需要使用raw方式
- Golang中的三个点
之前提到了把一个切片追加到另外一个切片时使用到了... 今天我们好好研究一下这三个点,博客写着写着又成了,回字有四种写法 ...第一种用法,可变长的参数 package main import &qu ...
- Eclipse Golang 开发环境搭建 GoClipse 插件
Windows平台 下载完成后,直接双击安装即可 默认情况下,.msi文件会安装在 C:\Go 目录下.可以将 C:\Go\bin 目录添加到环境变量 PATH 中,方便调用命令. Go 里面有两个非 ...
- win7访问局域网总提示用户名密码错误解决方案
win7访问局域网总提示用户名密码错误解决方案 1.点击开始-在搜索栏输入:secpol.msc(或者直接按下win+r键,输入secpol.msc),打开本地安全策略. 2.找到“安全设置”的“本地 ...
- 登录服务器失败 IP 统计和处理方法
一.登录ssh失败次数统计 1)错误的打开方式 awk '/Failed password/ {print $(NF-3)}' secure |sort -n |uniq -c|sort -n |ta ...
- java生成pdf文件 --- Table
Java利用itext实现导出PDF文件 所需要的jar包:com.lowagie.text_2.1.7.v201004222200.jar jar包下载地址:http://cn.jarfire.or ...
- 什么是servlet?
一.servlet是什么? 是用java编写的应用在服务端的程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和修改数据,生成动态Web内容,例如页面等等.从实现上讲,Servlet可以响应任 ...
- bgfx入门练习2——找出DX,OpenGL驱动切换实现原理
找到驱动切换的代码,自然而然就要找实现的位置了,简单搜了下,原来是GLSL Shader字节码转换到HLSL字节码,正好和Klayge做了相反的工作. 时间上似乎也差不多,Klyage是2014年搞的 ...
- 简单好用的时间选择插件My97datepicker
我们经常会需要验证字符串的格式,比如密码长度范围.电子邮件格式.固定电话号码和手机号码格式等,这个时候我们经常会需要用到正则表达式.但是正则表达式用起来性能会低一点,所以在需要验证的时候能不使用正则表 ...