Java基础004 --- BigInteger和BigDecimal

不可变类

8种基本类型的包装类型以及BigInteger、BigDecimal

BigInteger

Java中,CPU原生提供的最大整形范围是64位long,64位long能够直接通过CPU指令运行,计算速度快;但是数据范围超过64位long呢?

针对这种情况,Java提供了一个类来模拟大整数 --- BigInteger,它能够表示任意大小的整数,缺点是计算速度慢;做运算时只能用该类提供的计算方法做运算;

BigDecimal

和BigInteger类似,BigDecimal用来表示任意大小的浮点数并且精度完全准确

1、浮点数乘法

BigDecimal bd = new BigDecimal("123.45670000");
System.out.println(bd.multiply(bd));
15241.5567748900000000

2、获取有效值完全一致,但是去除末尾的0

BigDecimal bd = new BigDecimal("123.45670000");
System.out.println(bd.multiply(bd).stripTrailingZeros());
15241.55677489

3、获取小数位数

BigDecimal bd = new BigDecimal("123.45670000");
System.out.println(bd.multiply(bd).scale());
16

4、设置小数有效位数并设置取舍规则

BigDecimal bd3 = new BigDecimal("123.456789");
BigDecimal bd4 = bd3.setScale(4, RoundingMode.HALF_UP);
System.out.println(bd4);
BigDecimal bd5 = bd3.setScale(4, RoundingMode.DOWN);
System.out.println(bd5);
BigDecimal bd6 = bd3.setScale(4, RoundingMode.UP);
System.out.println(bd6);
BigDecimal bd8 = bd3.setScale(4, RoundingMode.CEILING);

   123.4568
   123.4567
   123.4568
   123.4568

5、BigDecimal做加减乘时,精度不会丢失,但是除法时,存在除不尽的情况,可以使用如下方法计算商和余数,divideAndRemainder返回一个数组

BigDecimal n = new BigDecimal("12.75");
BigDecimal m = new BigDecimal("0.14");
BigDecimal[] dr = n.divideAndRemainder(m);
System.out.println(dr[0]);
System.out.println(dr[1]);
91
0.01
原文地址:https://www.cnblogs.com/sniffs/p/12745533.html