BigInteger类
BigInteger:可以让超过Integer范围内的数据进行运算
构造方法:
BigInteger(String val)
代码示例:BigInteger bi = new BigInteger("2147483648");
成员方法:
(1)public BigInteger add(BigInteger val):加
(2)public BigInteger subtract(BigInteger val):减
(3)public BigInteger multiply(BigInteger val):乘
(4)public BigInteger divide(BigInteger val):除
(5)public BigInteger[] divideAndRemainder(BigInteger val):返回商和余数的数组
代码示例:
BigInteger bi1 = new BigInteger("100");
BigInteger bi2 = new BigInteger("50");
System.out.println("add:" + bi1.add(bi2));
System.out.println("subtract:" + bi1.subtract(bi2));
System.out.println("multiply:" + bi1.multiply(bi2));
System.out.println("divide:" + bi1.divide(bi2));
BigInteger[] bis = bi1.divideAndRemainder(bi2);
BigDecimal类
这么段代码:
System.out.println(0.09 + 0.01);
System.out.println(1.0 - 0.32);
System.out.println(1.015 * 100);
System.out.println(1.301 / 100);
我们能看到,程序结果与预想的结果不同。这是因为float类型和double类型数据的的存储和整数不一样导致。大部分时候,它们都是带有有效数字位。
由于在运算时候,float类型和double类型数据很容易丢失精度,为了能够精确的表示、计算浮点数,Java提供了BigDecimal类。
BigDecimal类:不可变的、任意精度的有符号十进制数,可以解决数据丢失问题。
注意:BigDecimal类,一般用在金融项目等对数据精度要求严格的场景
构造方法:
public BigDecimal(String val)
成员方法:
public BigDecimal add(BigDecimal augend):加
public BigDecimal subtract(BigDecimal subtrahend):减
public BigDecimal multiply(BigDecimal multiplicand):乘
public BigDecimal divide(BigDecimal divisor):除
public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode):除,
三个参数的意义:除数;小数的位数;取舍的标准,一般使BigDecimal.ROUND_HALF_UP
代码示例:
BigDecimal bd1 = new BigDecimal("0.09");
BigDecimal bd2 = new BigDecimal("0.01");
System.out.println("add:" + bd1.add(bd2));
System.out.println("------------------------");
BigDecimal bd3 = new BigDecimal("1.0");
BigDecimalbd4 = new BigDecimal("0.32");
System.out.println("subtract:" + bd3.subtract(bd4));
System.out.println("------------------------");
BigDecimal bd5 = new BigDecimal("1.015");
BigDecimal bd6 = new BigDecimal("100");
System.out.println("multiply:" + bd5.multiply(bd6));
System.out.println("-----------------------");
BigDecimal bd7 = new BigDecimal("1.301");
BigDecimal bd8 = new BigDecimal("100");
System.out.println("divide:" + bd7.divide(bd8));
System.out.println("divide:"+ bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP));