第8、9章:数字、日期操作类

Math数学计算类

程序就是一个数学的处理过程,所以在Java语言本身也提供有相应的数字处理的类库支持

  Math类(since 1.0)的主要功能是进行数学计算的操作类,提供有基础的计算公式,这个类的构造方法被私有化了但不是单例,而且该类之中提供的所有方法都是static型的方法,即:这些方法都可以通过类名称直接调用。

    虽然在Math类里面提供有四舍五入的处理方法,但是这个四舍五入在进行处理的时候是直接将小数点后的所有位进行处理了,这样肯定不方便,那么现在最方便的做法是可以实现指定位数的保留。

    Math类里面提供的基本上都是基础的数学公式,需要的时候需要自己重新整合。

Random随机数生成类

    java.util.Random类的主要功能是产生随机数的,这个类主要是依靠内部提供的方法来完成的。

    在国内有一款神奇的所谓的36选7的彩票,那么就可以利用Random实现随机生成彩票号。

    以后这种随机的操作都可以利用Random来处理

大数字处理类

    在进行数学计算的过程里面还有一个大数字的操作类,可实现海量数字的计算(能提供的也只是基础计算),现在假设一个数字很大,超过了double的范围,这个时候没有一种数据类型可以保存下此类的内容,最早的时候只能够通过String保存。

    如果现在要想进行加法计算,那么就需要逐位拆分,每一位自己计算,而后自己独立控制进位处理,这样的开发难度是非常高的,所以为了解决这样的问题,提供了两个大数字的操作类:BigInteger、BigDecimal。

 

之前分析了,当数字很大的时候只能利用字符串描述数字操作,所以这一点可以观察两个大数字操作类的构造方法:

  此时的计算过程是非常缓慢的,所以任何的电脑都是有极限的。既然在进行数学除法的时候可能出现无法整除,就可以使用其他的除法计算来求出余数:

 

  如果在开发中真进行计算的时候,该计算没有超过基本数据类型所包含的位数强烈不建议使用大数字类,因为这种计算性能是很差的

 

 

  BigDecimal操作形式和BigInteger是非常类似的,都有基础的数学支持。

但是在使用BigDecimal的时候有一个数据进位问题,在这个类里面定义有如下的除法计算:

 

使用BigDecimal实现四舍五入处理

 

    Math的处理由于使用的都是基本数据类型,所以性能一定高于大数字处理类

Date日期处理类

  从整体的java来讲一直在强调简单java类的主要设计来自于数据表的结构,那么在数据表的结构里面常用的类型:数字、字符串、日期,所以现在的程序里之差日期了

这个时候需要进一步去观察Date类中的构造方法

无参构造:public Date(){  this(System.currentTimeMillis());   }

有参构造:public Date(long date){  fastTime = date;  }

通过以上的源代码的分析可以得出一个结论:Date类中只是对long数据的一种包装。所以Date类中一定提供有所谓的日期与long数据类型转换的方法:

 

   long之中可以保存毫秒的数据量级,这样的话方便程序处理

SimpleDateFormat日期处理类

    虽然Date可以获取当前的日期时间,但是默认情况下Date类输出的日期时间结构并不能被国人所习惯,那么就需要对显示的格式进行格式化处理,为了可以格式化日期,在java.text包中提供有SimpleDateFormat(有点麻烦)程序类,该类中提供有如下操作方法:

格式化日期显示:

    处理可以将日期格式化为字符串之后,也可以实现字符串与日期之间的转换处理:

 将日期转为Date:

    如果在进行字符串定义的时候,所使用的日期时间数字超过了指定的合理范围,则会自动进行进位处理。

数字格式化:

 

    通过到现在的学习发现,String字符串可以向所有类型转换,基本类型、日期类型。所以字符串是一个万能的类型。

posted @ 2019-07-25 13:43  键盘小侠  阅读(176)  评论(0编辑  收藏  举报