【JavaSE】BigInteger 和 BigDecimal 类

举报
兮动人 发表于 2022/03/28 23:51:57 2022/03/28
【摘要】 BigInteger类 常用方法 1. add 加 2. subtract 减 3. multiply 乘 4. divide 除 BigDecimal 类 常用方法 1. add 加 2. subtract 减 3. multiply 乘 4. divide 除 应用场景: BigInteger类 常用方法当编程中,需要处理很大的整数,long 不够用long l = 237888888...

BigInteger类 常用方法

  • 当编程中,需要处理很大的整数,long 不够用
long l = 23788888899999999999999999999l;

在这里插入图片描述

  • 可以使用BigInteger的类来搞定
  • 在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
  • 可以创建一个 要操作的 BigInteger 然后进行相应操作

1. add 加

BigInteger bigInteger = new BigInteger("23788888899999999999999999999");
BigInteger bigInteger2 = new BigInteger("10");
System.out.println(bigInteger);
//解读:
//1. 在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
//2. 可以创建一个 要操作的 BigInteger 然后进行相应操作
BigInteger add = bigInteger.add(bigInteger2);
System.out.println(add);//加

在这里插入图片描述

2. subtract 减

BigInteger subtract = bigInteger.subtract(bigInteger2);
System.out.println(subtract);//减

在这里插入图片描述

3. multiply 乘

BigInteger multiply = bigInteger.multiply(bigInteger2);
System.out.println(multiply);//乘

在这里插入图片描述

4. divide 除

BigInteger divide = bigInteger.divide(bigInteger2);
System.out.println(divide);//除

在这里插入图片描述

BigDecimal 类 常用方法

  • 当需要保存一个精度很高的数时,double 不够用,如下就会出现损失精度的情况
double d = 1999.11111111111999999999999977788d;
System.out.println(d);

在这里插入图片描述

  • 可以用 BigDecimal 来解决
BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);

在这里插入图片描述

  • 如果对 BigDecimal进行运算,比如:加减乘除,需要使用对应的方法
  • 创建一个需要操作的 BigDecimal 然后调用相应的方法即可

1. add 加

BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);

BigDecimal bigDecimal2 = new BigDecimal("1.1");
System.out.println(bigDecimal.add(bigDecimal2));

在这里插入图片描述

2. subtract 减

System.out.println(bigDecimal.subtract(bigDecimal2));

在这里插入图片描述

3. multiply 乘

System.out.println(bigDecimal.multiply(bigDecimal2));

在这里插入图片描述

4. divide 除

  • 当除数为 1.1 时,会抛出异常ArithmeticException,这是因为最后的结果除不尽,可能是个无限循环小数,所以抛出异常
System.out.println(bigDecimal.divide(bigDecimal2));//可能抛出异常ArithmeticException

在这里插入图片描述

  • 如下,把除数改为 2 ,就可以被除尽
BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);
BigDecimal bigDecimal2 = new BigDecimal("2");
System.out.println(bigDecimal.divide(bigDecimal2));

在这里插入图片描述

解决这种出现异常的方法如下:

  • 在调用divide 方法时,指定精度即可, BigDecimal.ROUND_CEILING
  • 如果有无限循环小数,就会保留 分子 的精度
  • 如下就不会再抛出异常了
BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);

BigDecimal bigDecimal2 = new BigDecimal("1.1");
System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));

在这里插入图片描述

应用场景:

  1. Biglnteger适合保存比较大的整型
  2. BigDecimal适合保存精度更高的浮点型(小数)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。