Math及相关类

Math这个类在java中是一个与数学相关的类。位于java.lang包下。

Math的构造方法是私有的,我们不能直接调用来创建对象。

而且Math中的属性跟方法都是static的,不需要创建对象。

常用方法自己通过api文档了解。

值得说一下的是Math中有一个random()方法,返回一个随机数,范围是[0-1)。

但我们如果想要0-9之间的随机数,那么可以这样,int value=(int)Math.random()*10;

如果想要5.0-10.9之间的随机小数,可以这样,(Math.random()*6)+5,random()的范围是0-0.99999...那么范围就是(0.0-5.999994...)+5

但发现一个问题,计算小数时可能会丢失精度。

  这个时候可以考虑另外一个类专门处理随机数的Random类,

常用一些方法,

Random r=new Random();
r.nextInt();随机产生int类型取值范围的整数,有负数有正数。

r.nextInt(10);带参数可以指定范围,[0-10)之间的整数,包含0取不到10,左闭右开。

r.nextFloat();随机产生一个[0.0-1.0)的小数

r.nextBoolean();随机产生true,false

等等。

取5.0-10.9的随机数就可以这样,float f=(r.nextInt(6)+5)+r.nextFloat();[0.0--5.0]+5-->[0.0--10.0]+[0.0--0.9999..)即[5.0--10.999..)

  UUID类

UUID uuid=UUID.randomUUID();//创建对象
System.out.println(uuid.toString());//随机产生一个32位的每位是16进制的数字,一般用作表格主键

  BigInteger类

你是否有疑问,我们学习的基本数据类型,取值范围最大的long -2的63次方~2的63次方-1.那么如果我们万一需要超过这个范围的值该怎么办。

这个时候可以考虑BigInteger类,这个类底层采用的动态的数组,总之就是可以。

位于java.math包,继承Number类,它提供的构造方法都是带参数的,我们一般带String参数进行构造

//例子,设计一个方法,计算阶乘,如果这个数太大,long可能存不下,5:1x2x3x4x5 120
	private static BigInteger factorial(int num){
		BigInteger result=new BigInteger("1");
		for(int i=1;i<=num;i++){
			result=result.multiply(new BigInteger(i+""));
		}
		
		return result;
	}

  如果num参数传一个25,那么你会发现得到的结果远远超过long的范围。

  BigDecimal类

这个类是处理超过Double取值范围的情况下可以考虑使用的。这个类的方法多是处理小数点后的部分

BigDecimal decimal=new BigDecimal("1.123");
System.out.println(decimal.setScale(2,BigDecimal.ROUND_DOWN));//前者是位数,后者是模式,小数点后2位,模式是向下取整,即只保留小数两位之前的以后的直接不要了,没有四舍五入或者别的取值方式。

相比的是另外一种模式,BigDecimal.ROUND_UP,这种的话是不管你第三位是什么第二位都加1,比如1.123得到1.13  23.333得到23.34 除了0,如果第三位是

0的话,就不加,2.120000 2.12

   DecimalFormat小数点前后的部分都能处理的类---格式化,缺点是比较单一没什么模式

    DecimalFormat df=new DecimalFormat("000.###");//0代表必须存在,#代表可有可无,
        System.out.println(df.format(12.22222));//012.222小数点前面必须要三位,不够的用0补位,小数点后边可有三位,多的就不要了少了就不管。
        System.out.println(df.format(12.2));//012.2

 

posted on 2020-04-19 09:19  刀锋93  阅读(149)  评论(0编辑  收藏  举报

导航