BigInteger/BigDecima的使用

大数类

当我们编程中处理的数字比较大或者精度很高 , 此时long/double不够用就可以使用BigInteger/BigDecimal来处理(专门用在财务软件当中)

  • BigInteger/BigDecimal不属于基本数据类型,属于引用数据类型
  • BigDecimal/BigInteger的数字是对象 , 在对其进行加减乘除的时候也不会拆箱故不能直接进行 + - * / , 需要使用对应的方法

java.math.BigInteger(大整数)

方法名功能
BigInteger(“”)把数据当成字符串处理 , 然后封装成BigInteger类型的对象
BigInteger add(BigInteger)对两个BigInteger类型的数字进行相加
BigInteger subtract(BigInteger)对两个BigInteger类型的数字进行相减
BigInteger multiply(BigInteger)对两个BigInteger类型的数字进行相乘
BigInteger divide(BigInteger)对两个BigInteger类型的数字进行相除
public class BigInteger_ {
    public static void main(String[] args) {
		//编译错误: long类型存储不下这么大的数字
        //long l = 23788888899999999999999999999l;
        BigInteger bigInteger = new BigInteger("23788888899999999999999999999");
        BigInteger bigInteger2 = new BigInteger("10099999999999999999999999999999999999999999999999999999999");

        // 创建一个要操作的 BigInteger 然后进行相应操作
        BigInteger addResult = bigInteger.add(bigInteger2);
        System.out.println(addResult);//加
        
        BigInteger subtractResult = bigInteger.subtract(bigInteger2);
        System.out.println(subtractResult);//减
        
        BigInteger multiplyResult = bigInteger.multiply(bigInteger2);
        System.out.println(multiplyResult);//乘
        
        BigInteger divideResult = bigInteger.divide(bigInteger2);
        System.out.println(divideResult);//除
    }
}

java.math.BigDecimal(大浮点数)

方法名功能
BigDecimal(“”)把数据当成字符串处理 , 然后封装成BigDecimal类型的对象
BigDecimal add(BigDecimal)对两个 BigDecimal 类型的数字进行相加
BigDecimal subtract(BigDecimal)对两个 BigDecimal类型的数字进行相减
BigDecimal multiply(BigDecimal)对两个 BigDecimal类型的数字进行相乘
BigDecimal divide(BigDecimal , BigDecimal.ROUND_CEILING)对两个 BigDecimal类型的数字进行相除 , 如果除不尽会抛出异常 , 一般需要指定结果的精度
public class BigDecimal_ {
    public static void main(String[] args) {
        // double类型保存的精度最多为16位
        double d = 1999.11111111111999999999999977788d;
            
        // 创建一个需要操作的BigDecimal
        BigDecimal bigDecimal = new BigDecimal("1999.11111111111999999999999977788");
        // 这个3不是普通的3,是精度极高的3
        BigDecimal bigDecimal2 = new BigDecimal("3");
        // 对BigDecimal进行加减乘除的运算,需要使用对应的方法
        System.out.println(bigDecimal.add(bigDecimal2));
        System.out.println(bigDecimal.subtract(bigDecimal2));
        System.out.println(bigDecimal.multiply(bigDecimal2));
        // 在调用divide方法时如果结果是无限循环小数就会抛出异常ArithmeticException
        // 需要指定结果的精度BigDecimal.ROUND_CEILING/RoundingMode.CEILING,这样就是就会保留分子的精度
        System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));
    }
}

java.text.DecimalFormat格式化

java.text.DecimalFormat专门负责数字格式化的类(格式化三要素long/double类型的数字,数字格式化类,调用format方法格式化)

  • "#"代表任意数字, " , "代表千分位, "."代表小数点 , "0"代表保留小数位的个数不够时补0
方法名功能
DecimalFormat(“数字格式”)创建一个对象用来可以格式化指定数字
String format( long / double)按照规定格式化long类型或者double类型的数字 , 返回一个字符串
public class DecimalFormatTest01 {
    public static void main(String[] args) {
        // ###,###.##表示:加入千分位,保留2个小数
        DecimalFormat df = new DecimalFormat("###,###.##");
        String s = df.format(1234.561232);
        System.out.println(s); // "1,234.56"

        // ###,###.0000表示: 保留4个小数位,不够补上0
        DecimalFormat df2 = new DecimalFormat("###,###.0000"); 
        String s2 = df2.format(1234.56);
        System.out.println(s2); // "1,234.5600"
    }
}

java.lang.Math(数学运算)

常用的静态方法

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数

方法名功能
abs(数字类型)返回数字的绝对值
pow(int , int )对指定数字进行指定的幂运算
double ceil(double)向上取整 , 返回大于等于该参数的最小整数并转成double类型
double floor(double)向下取整 , 返回小于等于该参数的最大整数并转成double类型
long round(double)四舍五入 , 返回对参数四舍五入后的值并转成long类型
double sqrt(double)对数字求开方并转成double类型
min(int,int)返回两个数字之间的最小值
max(int,int)返回两个数字之间的最大值
random()返回 0 <= x < 1 之间的一个随机小数
public class MathMethod {
    public static void main(String[] args) {
        // abs 绝对值
        int abs = Math.abs(-9);
        System.out.println(abs);//9

        // pow 求幂
        double pow = Math.pow(2, 4);
        System.out.println(pow);//16

        //ceil向上取整转并成double
        double ceil = Math.ceil(3.9);
        System.out.println(ceil);//4.0

        //floor向下取整,返回小于等于该参数的最大整数并转成double类型
        double floor = Math.floor(-4.999);
        System.out.println(floor);//-5.0

        //round四舍五入 ,返回对参数四舍五入后的值并转成long类型
        long round = Math.round(5.51);
        System.out.println(round);//6

        // sqrt 对数字求开方
        double sqrt = Math.sqrt(9.0);
        System.out.println(sqrt);//3.0

        //max , min 返回最大值和最小值
        int min = Math.min(1, 9);
        int max = Math.max(45, 90);
        System.out.println("min=" + min);
        System.out.println("max=" + max);

        //返回a <= x <= b之间的一个随机整数的公式: (int)(a + Math.random() * (b-a +1) )
        for(int i = 0; i < 100; i++) {
            // 生成100个 2 <= x <= 7 之间的整数
            System.out.println((int)(2 +  Math.random() * (7 - 2 + 1)));
        }
    }
}

java.util.Random(随机数)

常用方法

方法名功能
Random()创建随机数对象 , 用来生成随机数
int nextInt()随机产生一个int类型取值范围内的数字
int nextInt(int a )产生[0~a]之间的随机整数 , 不包含a

生成5个不重复[0-100]的随机数并放到数组中

  • 修改数组中元素的默认值 , 或者使用 Integer 类型的数组 , 防止生成的随机数和数组元素的默认值重复
public class RandomTest02 {
    public static void main(String[] args) {
        // 创建Random对象
        Random random = new Random();
        // 准备一个长度为5的一维数组,默认值都是-1
        int[] arr = new int[5]; 
        for(int i = 0; i < arr.length; i++){
            arr[i] = -1;
        }

        // 循环生成随机数
        int index = 0;
        while(index < arr.length){
            int num = random.nextInt(101);
            // 查看随机数生成的次数
            System.out.println("生成的随机数:" + num);
            // 判断arr数组中有没有这个num , 如果没有这个num就放进去
            if(!contains(arr, num)){
                //index++表示先赋值 , 再加1
                arr[index++] = num;
            }
        }
        // 遍历生成随机数的数组
        for(int i = 0; i < arr.length; i++){
            System.out.println(arr[i]);
        }
    }
    
	//单独编写一个方法,这个方法专门用来判断数组中是否包含生成的随机数
    public static boolean contains(int[] arr, int key){
        //遍历数组中的每一个元素 , 看看是否有生成的随机数
        for(int i = 0; i < arr.length; i++){
            if(arr[i] == key){
                // 条件成立了表示包含,返回true
                return true;
            }
        }
        return false;
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值