Java之Math,Random,BigDecimal,BigIntegerhe DecimalFormat类的使用

Java之Math,Random,BigDecimal,BigIntegerhe DecimalFormat类的使用

1.Math数学工具类常用方法

//向上/下取整,四舍五入 ceil() floor() round()
Math.ceil(4.5) //5
Math.floor(4.3) //4
Math.round(4.6) //5
//绝对值 abs()   
Math.abs(-10) //10
//随机数 random()    范围:[0,1) 小数
Math.random()   
//幂函数 pow(a,b)   
Math.pow(2,3)  //8
//sqrt()平方根 
Math.sqrt(9) //3

2.Random类常用方法

Random rd=new Random();
rd.nextDouble(); //[0,1)小数
rd.nextFloat(); //[0,1)小数
rd.nextInt(); //int范围内的数
rd.nextInt(10); //[0,10)
rd.nextBoolean(); //false true

3.数字类BigDecimal和BigInteger

(1)BigDecimal

double a=0.03; double b=0.02; System.out.println(a-b);
结果为 : 0.0099999999999999999998
为什么会这样呢? 因为float和double都是浮点数,都有精度范围. 使用中, 往往难以确定. 常见的问题是定义了一个浮点数, 经过一系列的计算, 它本来应该等于某个确定值, 但实际上并不是! double相减会转换成二进制,因double有效位数为 16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差,解决方法就是使用BigDecimal,它的有效长度足够长可存储 小数位数因此可代替double来进行加减乘除, 金额必须是完全精确的计算, 故不能使用double或者float, 而应该采用java.math.BigDecimal.

  • 常用方法
BigDecimal b1 = new BigDecimal("0.03");
BigDecimal b2 = new BigDecimal("0.02");
System.out.println(b1.subtract(b2));  //0.01
//对比输出结果
BigDecimal b11 = new BigDecimal(0.03);
BigDecimal b22= new BigDecimal(0.02);
System.out.println(b11.subtract(b22)); //0.0099999999998

//BigDecimal对象中的值相加,返回BigDecimal对象
add(BigDecimal)

//BigDecimal对象中的值相减,返回BigDecimal对象
subtract(BigDecimal)

//BigDecimal对象中的值相乘,返回BigDecimal对象
multiply(BigDecimal)

//BigDecimal对象中的值相除,返回BigDecimal对象
divide(BigDecimal)

(2)BigInteger

如果操作一个整数已经超过了long的范围,此时可以使用BigInteger。由于不是基本数据类型,所以不能使用±*/,操作方法和上面一致。

常用方法:

/*操作长度大于long类型的整数*/
long l=999999999999999999l;
BigInteger in1=new BigInteger("999999999999999999999999999999999999999999");
BigInteger in2=new BigInteger("999999999999999999999999999999999999999998");
System.out.println(in1.subtract(in2));   //1
/* 进制转换  */
BigInteger in = new BigInteger("10001110",2);
System.out.println(in.intValue());//二进制转换为10进制
System.out.println(in.toString(2));//十进制转换为

4.DecimalFormat 数字格式化

常用方法:

double pi = 3.1415927;//圆周率
//取一位整数
        System.out.println(new DecimalFormat("0").format(pi));//3
//取一位整数和两位小数
        System.out.println(new DecimalFormat("0.00").format(pi));//3.14
//取两位整数和三位小数,整数不足部分以0填补。
        System.out.println(new DecimalFormat("00.000").format(pi));// 03.142
//取所有整数部分
        System.out.println(new DecimalFormat("#").format(pi));//3
//以百分比方式计数,并取两位小数
        System.out.println(new DecimalFormat("#.##%").format(pi));//314.16%
long c =299792458;//光速
//显示为科学计数法,并取五位小数
        System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8
//显示为两位整数的科学计数法,并取四位小数
        System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7
//每三位以逗号进行分隔。
        System.out.println(new DecimalFormat(",###").format(c));//299,792,458
//将格式嵌入文本
        System.out.println(new DecimalFormat("光速大小为每秒,###米。").format(c));```

上一篇:Java BigDecimal总结使用场景


下一篇:Java除法保留小数点后两位的两种方法