Math类:位于Java.lang包中,操作数字完成计算功能。
Java中提供了+、-、/、*、%等多种运算符,但是并不能完成所有的计算,如三角函数
所以Java提供了Math类,封装了数学运算,提供了基本数学操作,如指数、对数、平方根。
Math类中构造方法是private的,因此不能创建Math的实例对象。
此外,Math中的方法都是static的,所以调用Math中的方法通过类名.方法名进行调用。
静态常量:Math中存在两个静态常量:E、PI,分别对应e(自然对数)、π(圆周率)
方法:abs():求绝对值
min():求最小值; max():求最大值
abs()、min()、max()三个方法都是重载的,可以传入int、float、double、long类型
ceil():向上取整; floor():向下取整
ceil()、floor():返回>=该参数的最小参数、<=该参数的最大整数(double类型)
exp(a):计算e的a次方 pow(n1, n2):计算n1的n2次方;
sqrt(a):计算a的平方根 cbrt(a):计算a的立方根
log(a):计算以e为底,a的对数 log10(a):计算以10为底,a的对数
指数运算的方法都是传入double,并且返回double类型数据
sin(a):a的三角正弦 cos(a):a的三角余弦 tan(a):a的三角正切
三角函数方法 参数和返回值类型都是double类型。参数是用弧度表示(1=π/180)
Random类:位于Java.util包中,用于提供随机数
Random类中提供了丰富的随机数字生成方法,可以产生boolean、byte、int、long、float、double类型的随机数。
Random类中方法生成的随机数字都是均匀分布的,因此区间内部中数字的概率是相等的。
构造方法:Random():使用当前系统时间对应的数字作为种子数,之后构建Random对象
Random(long):传递long类型参数,作为种子数,创建随机数生成器
方法:nextBoolean():返回随机的boolean值,true与false的值产生概率相等
nextDouble():返回随机的double数 nextFloat():返回随机的float数
nextLong():返回随机的long数
nextInt():返回int值,范围区间在int的区间(-2^31~2^31-1)
nextInt(int n):返回int值,范围区间在[0, n)之间
如果想要得到指定区间的值,可以通过nextInt()进行一定的数学转换
setSeed(long seed):重新设置Random对象中的种子数
Java中用于生成随机数的两种方法:
Math中的random()方法
Random类中的方法
不同的是:Math中random()方法只能产生0~1之间的double类型的值
生成随机数多用于抽奖
// 案例:获取a~b之间的随机整数,其中a=2, b=7
// 第一种使用Math中的random方法
// 首先 a <= x <= b, 而0 <= Math.random() < 1
// Math.random() -> 0 <= Math.random() * (b-a) < b-a -> a <= Math.random() + a < b
// 因为x <= b,所以 a <= Math.random() * (b-a+1) + a <= b
int a = 2, b = 7;
for(int i = 0; i < 9; i++) {
System.our.println((int) (Math.random() * (b-a+1) + a));
}
// 第二种使用Random类:
// nextInt(int n):生成[0,n)之间的数
// Random.nextInt(b-a):[0, b-a) -> Random.nextInt(b-a)+a:[a, b)
// 由于[a, b] 所以:Random.nextInt(b-a+1)+a:[a, b+1) 可以取到[a,b]之间的所有整数
for(int i = 0; i < 9; i++) {
System.our.println(Random.nextInt(b-a+1)+a);
}
BigInteger:用于保存比较大的整数
编程保存整数时,long不够用,使用BigInteger来保存
在对BigInteger进行加减乘除的时候,不能使用+、-、*、/,BigInteger类中提供了一定的方法
add:相加 subtract:相减 multiply:相乘 devide:相除
BigDecimal:用于保存精度比较高的浮点数
编程保存小数时,double精度不够,使用BigDecimal进行保存
在对BiDecimal进行加减乘除的时候,不能使用+、-、*、/,BigDecimal类中提供一定的方法
add:相加 subtract:相减 multiply:相乘 devide:相除
对BigDecimal进行除运算,结果是无限小数时可能会抛出异常:ArithmeticException
使用BigDecimal.ROUND_CEILING参数,使计算结果保留与分子相同的精度
BigInteger、BigDecimal类都是通过new创建对象,传递的参数是具体的数值
BigDecimal b1 = new BigDecimal("1997.333333335555555599999999999");
BigDecimal b2 = new BigDecimal("1.12");
// add:加
System.out.println(b1.add(b2));
// subtract:减
System.out.println(b1.subtract(b2));
// multiply:乘
System.out.println(b1.multiply(b2));
// divide:除
System.out.println(b1.divide(b2, BigDecimal.ROUND_CEILING));