Java之BigInteger与BigDecimal

最近刷题遇到一些关于大数的题。原来一直用数组去做,最近才知道Java中封装了BigDecimal与BigInteger类,用来操作大数的,更加方便,功能更齐全。现在将其整理如下

BigInteger与BigDecimal
介绍
  • BigInteger与BigDecimal是在封装在java.math包中的(注意与Java.lang.Math类的区别)。
  • BigInteger是用来操作整数的。BigInteger 提供所有 Java的基本整数操作符的对应物,并提供 java.lang.Math的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD计算、质数测试、素数生成、位操作以及一些其他操作。
  • BigDecimal是用来操作浮点数的。BigDecimal 类提供以下操作:算术、标度操作、舍入、比较、哈希算法和格式转换。toString() 方法提供 BigDecimal 的规范表示形式。
用法

因为BigInteger与BigDecimal两个类的方法比较相似,我就只用BigInteger来做举例。关于未提到的方法,请大家阅读Java API文档。
举例

import java.math.BigDecimal;
import java.math.BigInteger;
public class Demo {
    public static void main(String[] args) {
        BigInteger bi1 = new BigInteger("22222222222222222222222222222222222222");
        BigInteger bi2 = new BigInteger("11111111111111111111111111111111111111");
        System.out.println("加法:"+bi1.add(bi2));
        System.out.println("减法:"+bi1.subtract(bi2));
        System.out.println("乘法:"+bi1.multiply(bi2));
        System.out.println("除法:"+bi1.divide(bi2));
        BigInteger bi3 = new BigInteger("457889217565949786284022605");
        BigInteger[] reminder = bi1.divideAndRemainder(bi3);    //返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。
        System.out.println(bi1 + "/" + bi3 + "=" + reminder[0] + "..." +reminder[1]);

        //BigDecimal的初始化
        BigDecimal bd1 = new BigDecimal(bi3,2); //bd1 = bi3/100;
        BigDecimal bd2 = new BigDecimal("1594683486.489491878648941864");
        System.out.println(bd1);
        System.out.println(bd2);
        
    }
}
BigInteger与BigDecimal实现原理

这里简单说说BigInteger与BigDecimal的原理,便于大家理解。

  • BigInteger就是用int数组来实现保存任意精度的整数。
  • BigDecimal就是BigInteger的原理,将小数扩大成整数,在用scale表示小数点的位置。十进制(BigInteger)+小数点位置(scale)来表示小数。比如:123.45就是BigInteger为12345,scale为2。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值