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.UP:远离零方向舍入的舍入模式
RoundingMode.DOWN:向零方向舍入的舍入模式
RoundingMode.CEILING:向正无限大方向舍入的舍入模式
RoundingMode.FLOOR:向负无限大方向舍入的舍入模式

注意事项:

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

 

你可能感兴趣的:(java,开发语言,intellij-idea,API,BigInteger,BigDecima)