【JavaSE】BigInteger 和 BigDecimal 类
  TEZNKK3IfmPf 2023年11月12日 17 0

BigInteger类 常用方法

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

【JavaSE】BigInteger 和 BigDecimal 类

  • 可以使用​​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);//加

【JavaSE】BigInteger 和 BigDecimal 类

2. subtract 减

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

【JavaSE】BigInteger 和 BigDecimal 类

3. multiply 乘

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

【JavaSE】BigInteger 和 BigDecimal 类

4. divide 除

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

【JavaSE】BigInteger 和 BigDecimal 类

BigDecimal 类 常用方法

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

【JavaSE】BigInteger 和 BigDecimal 类

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

【JavaSE】BigInteger 和 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));

【JavaSE】BigInteger 和 BigDecimal 类

2. subtract 减

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

【JavaSE】BigInteger 和 BigDecimal 类

3. multiply 乘

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

【JavaSE】BigInteger 和 BigDecimal 类

4. divide 除

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

【JavaSE】BigInteger 和 BigDecimal 类

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

【JavaSE】BigInteger 和 BigDecimal 类

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

  • 在调用​​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));

【JavaSE】BigInteger 和 BigDecimal 类

应用场景:

  1. ​Biglnteger​​适合保存比较大的整型
  2. ​BigDecimal​​适合保存精度更高的浮点型(小数)
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

TEZNKK3IfmPf