Java中的Math包、BigInteger、BigDecimal类

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));
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值