Math及相关类
Posted hebiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Math及相关类的主要内容,如果未能解决你的问题,请参考以下文章