学习java时候的笔记(十八)

BigInteger

BigInteger常见构造方法

构造方法说明
BigInteger(int num,Random rnd)获取随机最大整数,范围[0 , 2的num次方 - 1]
BigInteger(String val) (字符串val必须是整数)获取指定的大整数
BigInteger(String val , int radix)获取指定进制的大整数
静态方法:public static BigInteger valueOf(long)静态方法获取BigInteger的对象,内部有优化

BigInteger构造方法小结

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

Demo:

public class BigIntergerDemo1 {
    public static void main(String[] args) {
        //获取一个随机的大整数,范围[0 , 2的4次方-1] => [0, 15]
        BigInteger bi = new BigInteger(4,new Random());
        System.out.println(bi);

        //获取一个指定的大整数
        BigInteger bi2 = new BigInteger("100000000000000000000");
        System.out.println(bi2);

        //获取指定进制的大整数
        BigInteger bi3 = new BigInteger("100",10); // 十进制的100
        System.out.println(bi3);
        BigInteger bi4 = new BigInteger("100",2);
        System.out.println(bi4);//将2进制的100转换成10进制的4并打印出来
    }
}

BigInteger常见成员方法

方法名说明
add(BigInteger val)加法
subtract(BigInteger val)减法
multiply(BigInteger val)乘法
divide(BigInteger val)除法,获取商
divideAndRemainder(BigInteger val)除法,获取商和余数
max/min(BigInteger val)返回最大值,最小值
intValue(BigInteger val)转为int类型整数,超出范围数据有误
equals(Object x)比较是否相同
pow(int exponent)次幂

Demo:

import java.math.BigInteger;

public class BigIntegerDemo2 {
    public static void main(String[] args) {
    
        //创建两个BigInteger对象
        BigInteger bi1 = BigInteger.valueOf(10);
        BigInteger bi2 = BigInteger.valueOf(5);

        //加法
        BigInteger bi3 = bi1.add(bi2);
        System.out.println(bi3);

        //除法,获取商和余数
        BigInteger[] arr1 = bi1.divideAndRemainder(bi2);
        System.out.println(arr1.length);//2   商和余数
        System.out.println(arr1[0]); //2 商
        System.out.println(arr1[1]); //0 余数

        //equals   BigInteger中的equals比较的是值,不是地址值
        System.out.println(bi1.equals(bi2)); // false 不相同
        bi2 = BigInteger.valueOf(10);
        System.out.println(bi1.equals(bi2)); // true 相同

        //pow次幂
        System.out.println(bi1.pow(2));//100  10的平方

        // max/min
        System.out.println(bi1.max(bi3));// 15 返回最大值
        System.out.println(bi1.min(bi3));// 10 返回最大值

        //intValue()转为int类型的整数,超出范围数据有误
        int i = bi1.intValue();
        System.out.println(i); // 10
        BigInteger bi4 = BigInteger.valueOf(9999999999999999L);
        int i1 = bi4.intValue();
        System.out.println(i1); // 1874919423  超出int类型范围,数据有误

        //longValue()转为long类型的整数
        long l = bi4.longValue();
        System.out.println(l);// 9999999999999999
        
        //doubleValue()转为double类型的小数
        double v = bi1.doubleValue();
        System.out.println(v);  // 10.0

    }
}

BigDecimal

  • 用于小数的精确计算
  • 用来表示很长的小数

BigDecimal的作用是什么?

  • 表示较长的小数和解决小数运算精度失真问题。

BigDecimal对象获取方法

构造方法说明
BigDecimal(double val)通过传递double类型的小数来创建对象(有可能不准确)
BigDecimal(String val)通过传递字符串类型的小数来创建对象
静态方法说明
public static BigDecimal valueOf(double val)通过静态方法获取对象

Demo:

import java.math.BigDecimal;

public class BigDecimalDemo1 {
    public static void main(String[] args) {

        //通过传递double类型的小数来创建对象
        BigDecimal bd1 = new BigDecimal(8.08);//8.0800000000000000710542735760100185871124267578125
        BigDecimal bd2 = new BigDecimal(8.01);//8.0099999999999997868371792719699442386627197265625
        System.out.println(bd1);
        System.out.println(bd2);

        //通过传递字符串类型的小数来创建对象
        BigDecimal bd3 = new BigDecimal("8.01");
        BigDecimal bd4 = new BigDecimal("8.09");
        BigDecimal bd5 = bd3.add(bd4);
        System.out.println(bd3);//8.01
        System.out.println(bd4);//8.09
        System.out.println(bd5);//16.10

        //通过静态方法获取对象
        BigDecimal bd6 = BigDecimal.valueOf(10);
        System.out.println(bd6);

        /*
        如果要表示的数字不大,建议用静态方法
        如果要表示的数字比较大,建议用构造方法
        .如果我们传递的是0~10之间的整数,包含0,包含10,那么方法会返回已经创建好的对象,不会重新new
         */
    }
}

BigDecimal常见成员方法

方法名说明
public static BigDecimal valueOf(double val)获取对象
add(BigDecimal val)加法
subtract(BigDecimal val)减法
multiply(BigDecimal val)乘法
divide(BigDecimal val)除法 (如果除不尽,程序报错)
divide(BigDecimal val, 精确几位, 舍入模式)除法

Demo:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalDemo3 {
    public static void main(String[] args) {
        //加法
        BigDecimal bd1 = BigDecimal.valueOf(10.0);
        BigDecimal bd2 = BigDecimal.valueOf(2.0);
        BigDecimal bd3 = bd1.add(bd2);
        System.out.println(bd3); // 12.0

        //减法
        BigDecimal bd4 = bd1.subtract(bd2);
        System.out.println(bd4);//8.0

        //乘法
        BigDecimal bd5 = bd1.multiply(bd2);
        System.out.println(bd5); // 20.00

        //除法
        BigDecimal bd6 = bd1.divide(bd2);
        System.out.println(bd6);//5

        //有舍入模式的除法
        BigDecimal bd7 = BigDecimal.valueOf(3.0);
//        bd1.divide(bd7); //除不尽,程序报错
        BigDecimal bd8 = bd1.divide(bd7, 2, RoundingMode.HALF_UP);//RoundingMode.HALF_UP四舍五入
        System.out.println(bd8);//3.33
    }
}

最后:欢迎大家关注我的公众号
在这里插入图片描述

  • 33
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yliken

你的鼓励就像月亮,照亮了在黑暗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值