• 前言

    在我们的日常开发过程中,我们会经常性的使用到数字类型的数据,同时,也会有众多的对数字处理的需求,针对这个方面的问题,在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类型.其构造方法有很多.

 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]__关于数字处理类的更多相关文章

  1. [Java初探04]__字符串(String类)相关

    前言 接下来将暂时将重心偏移向实际操作,不在将大量时间花费在详细的知识点整理上,将会简略知识总结笔记的记录,加强实际练习的时间,实例练习篇也不再同步进行,我会将部分我觉得重要的源码更新在每节知识点后面 ...

  2. [java初探05]__数组的简单认识及Arrays类的常用方法

    数组是具有相同数据类型的一组数据的集合.在程序设计中,这样的集合称之为数组.数组的每个元素都具有相同的数据类型,在Java中数组也被看为一个对象. 在里,了解了数组的定义之后, 我们知道了,数组并不是 ...

  3. [Java初探08]__简单学习Java类和对象

    前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...

  4. [java初探06]__排序算法的简单认识

    今天,准备填完昨天没填的坑,将排序算法方面的知识系统的学习一下,但是在简单的了解了一下后,有些不知如何组织学习了,因为排序算法的种类,实在是太多了,各有优略,各有适用的场景.有些不知所措,从何开始. ...

  5. java多线程10:并发工具类CountDownLatch、CyclicBarrier和Semaphore

    在JDK的并发包(java.util.concurrent下)中给开发者提供了几个非常有用的并发工具类,让用户不需要再去关心如何在并发场景下写出同时兼顾线程安全性与高效率的代码. 本文分别介绍Coun ...

  6. [java初探09]__关于java的包装类

    前言 在Java语言的学习过程中,我们逐渐的理解了Java面向对象的思想,与类和对象的应用.但是在基本数据类型的使用上,我们无法将其定义为一个对象,通过使用对象的方法来使用它们,但是Java语言的思想 ...

  7. [Java初探07]__关于面向对象的简单认识

    前言 类和对象,在我们学习Java语言的过程中,它们无时无刻不存在着,在我们还远未详细弄明白它们的意义之前,在我们不知不觉的下意识里,我们都会直接或间接的用到它们,这是因为Java是一门面向对象的语言 ...

  8. [java初探总结篇]__java初探总结

    前言 终于,java初探系列的学习,要告一阶段了,java初探系列在我的计划中是从头学java中的第一个阶段,知识主要涉及java的基础知识,所以在笔记上实在花了不少的功夫.虽然是在第一阶段上面花费了 ...

  9. Java之数字处理类浅析

    包装类: 数据类型相对的包装类:byte---Byteshort---Shortint---Integerlong---Long float---Floatdouble---Double boolea ...

随机推荐

  1. Git-git push -u为何第二次不用指定-u?

    1,如果当前分支只有一个追踪分支,那么主机名都可以省略,如:git push origin 将当前分支推送到origin主机的对应分支 2,$ git push 如果当前分支与多个主机存在追踪关系,那 ...

  2. PHP+ajax实现二级联动

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. Annotation 标注

    1.画出基本图 当图线中某些特殊地方需要标注时,我们可以使用 annotation. matplotlib 中的 annotation 有两种方法, 一种是用 plt 里面的 annotate,一种是 ...

  4. The best way to use Xtool X100 PAD2 for FEM programming

    Look here: XTOOL X100 PAD2 is new FEM programming. Possible to use Xtool X100 PAD2 for FEM programmi ...

  5. google protobuf VC下的使用笔记

    1 使用protobuf 2.x 下载地址(3.x 在c++11 vs2017下报错) 源码 https://github.com/google/protobuf 或者直接下载 二进制文件 2 如果下 ...

  6. ABP 权限拦截 第二篇

    由于访问人数过多,我今天从新整理一下ABP权限认证机制,帮助大家更容易读懂 1.Abp 的权限拦截主要通过过滤器,    public class AbpAuthorizationFilter : I ...

  7. http协议介绍及get与post请求、响应状态码

    HTTP:  通信双方如果想要通信就必须遵循一定的规则,我们把这个规则称之为HTTP协议! 报文:  HTTP协议通信的内容我们称之为:报文 报文格式:    报文首部 空行 报文主体 1.请求报文 ...

  8. Python之路(一)-python简介

    一.python简介,python2.x与python3.x的区别 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Py ...

  9. Java变成思想总结

    Java容器 collection一个独立的元素序列,这些元素都服从一条或多条规则.list必须按照插入的顺序保存元素,set不能有重复元素,queue按照排队的顺序确定对象产生的顺序.map一组成对 ...

  10. mac中启动jmeter方法

    1.mac中安装了jdk后,不需要去配置环境变量 2.现在jmeter包,解压缩后.打开terminal 3.在terminal中输入命令:sh jmeter.sh 打开Terminnal的方法: T ...