Java—— 常见API介绍 第三期

BigInteger

说明:

BigInteger表示一个大整数

构造方法:

 方法名说明
public BigInteger(int num, Random r)获取随机大整数,范围:[0 ~ 2^num -1]
public BigInteger(String val)获取指定的大整数
public BigInteger(String val, int radix)获取指定进制的大整数
代码演示:
public class Test {
    public static void main(String[] args) {
        //public BigInteger(int num, Random r)	获取随机大整数,范围:[0 ~ 2^num -1]
        //public BigInteger(String val)	获取指定的大整数
        //public BigInteger(String val, int radix)	获取指定进制的大整数

        Random r = new Random();
        for (int i = 0; i < 20; i++) {
            BigInteger bd1 = new BigInteger(4, r);
            System.out.print(bd1+" ");//10 5 15 1 5 14 15 1 3 12 4 10 7 9 4 8 4 7 13 1
        }

        BigInteger bd2 = new BigInteger("999999999999999999");
        System.out.println(bd2);//999999999999999999

        BigInteger bd3 = new BigInteger("10100",2);
        System.out.println(bd3);//20
        //细节:
        //1.字符串中的数字必须是整数
        //2.字符串中的数字必须要跟进制吻合。
        //比如二进制中,那么只能写0和1,写其他的就报错。
    }
}

常用成员方法:

方法名说明
public static BigInteger value0f (long val)静态方法获取BigInteger的对象,内部有优化 
public BigInteger add (BigInteger val)加法
public BigInteger subtract (BigInteger val)减法
public BigInteger multiply (BigInteger val)乘法
public BigInteger divide (BigInteger val)除法,获取商
public BigInteger[] divideAndRemainder (BigInteger val)除法,
获取商和余数
public boolean equals (0bject x)比较是否相同
public BigInteger pow (int exponent)次幂
public BigInteger max/min (BigInteger val)返回较大值/较小值
public int intValue (BigInteger val)

转为int类型整数,

超出范围数据有误

代码演示:
public class Test2 {
    public static void main(String[] args) {

        //静态方法获取BigInteger对象
        BigInteger bd1 = BigInteger.valueOf(99999999);
        System.out.println(bd1);//99999999

        //静态方法获取BigInteger的对象,内部有优化
        //细节:
        //1.能表示范围比较小,只能在long的取值范围之内,如果超出1ong的范围就不行了。
        //2.在内部对常用的数字:-16~16进行了优化。
        //提前把-16 ~16创建好BigInteger的对象,如果多次获取不会重新创建新的。
        BigInteger bd2 = BigInteger.valueOf(100);
        BigInteger bd3 = BigInteger.valueOf(100);
        System.out.println(bd2 == bd3);//false

        BigInteger bd4 = BigInteger.valueOf(16);
        BigInteger bd5 = BigInteger.valueOf(16);
        System.out.println(bd4 == bd5);//true


        BigInteger bd6 = BigInteger.valueOf(10);
        BigInteger bd7 = BigInteger.valueOf(3);
        //加法
        BigInteger result1 = bd6.add(bd7);
        System.out.println(result1);//14

        //除法,获取商和余数
        BigInteger[] result2 = bd6.divideAndRemainder(bd7);
        System.out.println(result2[0]);//记录商   3
        System.out.println(result2[1]);//记录余数 1

        //比较是否相同
        boolean result3 = bd6.equals(bd7);
        System.out.println(result3);

        //次幂
        BigInteger result4 = bd6.pow(2);
        System.out.println(result4);//100

        //返回较大值/较小值
        BigInteger max = bd6.max(bd7);
        System.out.println(max);//10
        BigInteger min = bd6.min(bd7);
        System.out.println(min);//3


        //转为int类型整数, 超出范围数据有误
        int num = bd6.intValue();
        System.out.println(num);//10

    }
}

注意事项:

1.如果BigInteger表示的数字没有超出long的范围,建议用静态方法获取。
2.如果BigInteger表示的超出long的范围,建议用构造方法获取。
3.对象一旦创建,BigInteger内部记录的值不能发生改变。
4.只要进行计算都会产生一个新的BigInteger对象


BigDecima

说明:

BigDecima用于小数的精确计算或用来表示很大的小数 

构造方法:

方法名说明
public BigDecimal(double val)传递double类型的小数来创建对象
public BigDecimal(String val)传递字符串来创建对象
代码演示:
public class Test3 {
    public static void main(String[] args) {
        //public BigDecimal(double val)	传递double类型的小数来创建对象
        //public BigDecimal(String val)	传递字符串来创建对象

        //传递double类型的小数来创建对象
        //结果可能是不准确的,不建议使用
        BigDecimal bd1 = new BigDecimal(0.9);
        System.out.println(bd1);//0.90000000000000002220446049250313080847263336181640625

        //传递字符串来创建对象
        BigDecimal bd2 = new BigDecimal("0.9");
        System.out.println(bd2);//0.9

    }
}

常用成员方法:

方法名说明
public static BigDecimal valueof(double val)获取对象
public BigDecimal add(BigDecimal val)加法
public BigDecimal subtract(BigDecimal val)减法
public BigDecimal multiply(BigDecimal val)乘法
public BigDecimal divide(BigDecimal val)除法
public BigDecimal divide(BigDecimal val,精确位数,舍入模式)除法
代码演示:
public class Test4 {
    public static void main(String[] args) {
        
        //获取对象
        //细节:
        //如果传递的是0~10之间的整数,包含0,包含10,
        //那么方法会返回已经创建好的对象,不会重新new
        //如果传递的是小数,底层调用toString方法将小数转化为字符串,再利用new创建
        BigDecimal bd1 = BigDecimal.valueOf(10);
        System.out.println(bd1);//10

        BigDecimal bd2 = BigDecimal.valueOf(10);
        System.out.println(bd1 == bd2);//true

        BigDecimal bd3 = BigDecimal.valueOf(10.0);
        System.out.println(bd3);//10.0
        System.out.println(bd1 == bd3);//false


        BigDecimal bd4 = BigDecimal.valueOf(10.0);
        BigDecimal bd5 = BigDecimal.valueOf(3.0);
        //加法
        BigDecimal result1 = bd4.add(bd5);
        System.out.println(result1);//13.0

        //除法
        /* BigDecimal result2 = bd4.divide(bd5);
        System.out.println(result2);//报错:没有精确可表示的小数结果*/
        //所以需要规定精确位数,舍入模式
        BigDecimal result2 = bd4.divide(bd5, 2, RoundingMode.HALF_UP);
        System.out.println(result2);//3.33

    }
}

扩展:舍入模式

RoundingMode.HALF_UP:四舍五入

RoundingMode.UP:远离零方向舍入的舍入模式
RoundingMode.DOWN:向零方向舍入的舍入模式
RoundingMode.CEILING:向正无限大方向舍入的舍入模式
RoundingMode.FLOOR:向负无限大方向舍入的舍入模式

注意事项:

1.如果要表示的数字不大,没有超出double的取值范围,建议使用静态方法
2.如果要表示的数字比较大,超出了double的取值范围,建议使用构造方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值