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