BigInteger与BigDecimal

BigInteger

BigInteger构造方法
public BigInteger(int num, Random rnd)
获取随机大整数,范围:[0 ~ 2的num次方-1]
public BigInteger(String val)
获取指定的大整数
public BigInteger(String val, int radix)
获取指定进制的大整数

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

 BigInteger静态方法
public static BigInteger valueOf(long val)静态方法获取BigInteger的对象,内部有优化,范围[-16 ~ 16]。
 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(Object x)比较是否相同
public BigInteger pow(int exponent)次幂、次方
public BigInteger max/min(BigInteger val)返回较大值/较小值
public int intValue(BigInteger val)转为int类型整数,超出范围数据有误

 示例代码:

    @Test
    public void bigInteger() {
    
        BigInteger gz = new BigInteger("5325252523663464364436436346");

        //1.创建两个BigInteger对象
        BigInteger bd1 = BigInteger.valueOf(10);
        BigInteger bd2 = BigInteger.valueOf(5);

        //2.加法
        BigInteger bd3 = bd1.add(bd2);
        System.out.println(bd3);

        //3.除法,获取商和余数
        BigInteger[] arr = bd1.divideAndRemainder(bd2);
        System.out.println(arr[0]);
        System.out.println(arr[1]);

        //4.比较是否相同
        boolean result = bd1.equals(bd2);
        System.out.println(result);

        //5.次幂
        BigInteger bd4 = bd1.pow(2);
        System.out.println(bd4);

        //6.max
        BigInteger bd5 = bd1.max(bd2);


        //7.转为int类型整数,超出范围数据有误
        /*
            BigInteger bd6 = BigInteger.valueOf(2147483647L);
            int i = bd6.intValue();
            System.out.println(i);
        */

        BigInteger bd6 = BigInteger.valueOf(200);
        double v = bd6.doubleValue();
        System.out.println(v);//200.0
    }

 运行结果:

BigInteger实现高精度计算出 S=1!+2!+3!+⋯+n!(≤50)
@Test
public void test() {

    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();

    BigInteger ans = new BigInteger("0");
    for (int i = n; i > 0; i--) {
        BigInteger res = new BigInteger("1");
        for(int j = i; j > 0; j--) {
            res = res.multiply(BigInteger.valueOf(j));
        }
        ans = ans.add(res);
    }
    System.out.println(ans);
}

@Test
public void test() {
        BigInteger days = new BigInteger(String.valueOf(20));
        for (int i = 1; i < 22; i ++ ) {
            days = days.multiply(BigInteger.valueOf(20));
        }
        System.out.println(days.mod(BigInteger.valueOf(7)));
        //算出20^22的结果后,再mod上7,然后再加上6就是我们的答案,因为是从星期6开始枚举的。
    }

BigDecimal

BigInteger构造方法
public BigDecimal(int val)
public BigDecimal(long val)
public BiDecimal(double val)具有不可预知性,可能丢失精度,不建议使用
public BigDecimal(String val)常用
 BigInteger静态方法
public static BigDecimal valueOf(double val)底层是new BigDecimal(String str) 没有超出double范围建议使用静态方法,超出double范围建议使用构造方法
public static BigDecimal valueOf(long val)内部有优化[0 ~ 10]的整数!!!
 BigInteger常用成员方法
public BigDecimal add(BigDecimal value)加法运算
public BigDecimal subtract(BigDecimal value)减法运算
public BigDecimal multiply(BigDecimal value)乘法运算
public BigDecimal divide(BigDecimal value)除法运算

代码示例: 

@Test
    public void test1() {
        BigDecimal b1 = new BigDecimal("1") ;
        BigDecimal b2 = new BigDecimal("3") ;

        System.out.println(b1.divide(b2 , 2 , RoundingMode.UP));
    }

 

    @Test
    public void test2() {
        BigDecimal b1 = new BigDecimal("1") ;
        BigDecimal b2 = new BigDecimal("3") ;

        System.out.println(b1.divide(b2 , 2 , RoundingMode.FLOOR));
    }

 

    @Test
    public void test3() {
        BigDecimal b1 = new BigDecimal("0.3") ;
        BigDecimal b2 = new BigDecimal("4") ;

        System.out.println(b1.divide(b2 , 2 , RoundingMode.HALF_UP));
    }

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BigInteger转换为BigDecimal可以通过BigDecimal的构造函数来实现,将BigInteger作为参数传递给BigDecimal构造函数即可。 例如: BigInteger bigInteger = new BigInteger("12345678901234567890"); BigDecimal bigDecimal = new BigDecimal(bigInteger); 这样就将BigInteger类型的bigInteger转换为了BigDecimal类型的bigDecimal。 ### 回答2: BigIntegerBigDecimal都是Java中处理大数的类。BigInteger表示不可变的任意精度整数,而BigDecimal表示不可变的任意精度十进制数。 要将BigInteger转换为BigDecimal,可以使用BigDecimal的构造方法来完成转换。BigDecimal的构造方法接受一个BigInteger类型的参数,可以直接将BigInteger转换为相应的BigDecimal对象。 以下是将BigInteger对象转换为BigDecimal对象的示例代码: ```java BigInteger bigInteger = new BigInteger("1234567890"); BigDecimal bigDecimal = new BigDecimal(bigInteger); ``` 上述代码中,首先创建了一个BigInteger对象bigInteger,其值为"1234567890"。然后使用BigDecimal的构造方法将bigInteger转换为相应的BigDecimal对象bigDecimal。 通过以上代码,我们成功将BigInteger对象转换为BigDecimal对象。这样就可以继续使用BigDecimal提供的各种方法进行高精度的数值计算。 需要注意的是,由于BigDecimal表示的是十进制数,而BigInteger表示的是整数,所以在转换时可能会导致精度的损失或受到舍入模式的影响。因此,在进行大数计算时,需要根据具体的需求选择合适的转换方式和精度控制。 ### 回答3: 在Java中,BigIntegerBigDecimal是数字处理中非常常用的两个类。BigInteger用于处理任意长度的整数,而BigDecimal用于处理任意精度的小数。 要将BigInteger转换为BigDecimal,可以使用BigDecimal的构造函数。BigDecimal类有一个可以接受BigInteger值的构造函数,这样可以将BigInteger的值转换为BigDecimal。 以下是一个简单的示例代码,演示如何将BigInteger转换为BigDecimal: ```java import java.math.BigDecimal; import java.math.BigInteger; public class BigIntegerToBigDecimal { public static void main(String[] args) { BigInteger bigInteger = new BigInteger("1234567890"); BigDecimal bigDecimal = new BigDecimal(bigInteger); System.out.println("BigInteger: " + bigInteger); System.out.println("BigDecimal: " + bigDecimal); } } ``` 在上述示例中,我们首先创建了一个BigInteger对象(bigInteger),并将其初始化为1234567890。然后,我们使用BigDecimal的构造函数将bigInteger转换为BigDecimal(bigDecimal)。最后,我们将bigIntegerbigDecimal的值输出到控制台上。 输出结果: BigInteger: 1234567890 BigDecimal: 1234567890 通过这种方式,我们可以将BigInteger转换为BigDecimal,用于处理高精度的小数计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值