一、BigInteger大整型类

基本数据类型在表示整型时最大值为2^63-1,即long类型所表示的上限;但想要表示更大的数时long类型肯定不行,所以就要使用大整型类BigInteger;但其不能像基本数据类型一样直接使用“+、-、*、/”符号进行运算操作,需要通过自身的方法操作;

常用方法:

构造器:BigInteger bi=new BigInteger(String value);

BigInteger add(BigInteger val) 返回两个大整数的和
BigInteger subtract(BigInteger val)返回两个大整数相减的结果
BigInteger multiply(BigInteger val) 返回两个大整数的积
BigInteger divide(BigInteger val)  返回两个大整数的商
BigInteger pow(int exponent) 返回当前大整数的exponent次方
BigInteger remainder(BigInteger val) 返回当前大整数除以val的余数

BigInteger negate() 返回当前大整数的相反数
BigInteger abs()  返回大整数的绝对值
BigInteger gcd(BigInteger val)  返回大整数的最大公约数
BigInteger max(BigInteger val) 返回两个大整数的最大者
BigInteger min(BigInteger val) 返回两个大整数的最小者
BigInteger mod(BigInteger val) 用当前大整数对val求模

int intValue() 返回大整数的整型值
long longValue() 返回大整数的long型值
double doubleValue()   返回大整数的double类型的值
float floatValue()   返回大整数的float类型的值
byte[] toByteArray(BigInteger val)将大整数转换成二进制反码保存在byte数组中
String toString(int redix) 将当前大整数转换成redix进制的字符串形式

BigInteger and(BigInteger val)  返回两个大整数的按位与的结果
BigInteger andNot(BigInteger val) 返回两个大整数与非的结果
BigInteger not() 返回当前大整数的非
BigInteger or(BigInteger val) 返回两个大整数的按位或
BigInteger xor(BigInteger val) 返回两个大整数的异或
BigInteger leftShift(int n) 将当前大整数左移n位后返回
BigInteger rightShift(int n) 将当前大整数右移n位后返回

二、BigDecimal大浮点型

同样浮点型数据在精度上太高,即小数位太多,基本数据类型double也不能表示;需要使用BigDecimal类;

常用方法:

构造器:BigDecimalbi=new BigDecimal(String value);

BigDecimal add(BigDecimal val) 返回两个大整数的和
BigDecimal subtract(BigDecimal val)返回两个大整数相减的结果
BigDecimal multiply(BigDecimal val) 返回两个大整数的积
BigDecimal divide(BigDecimal val)  返回两个大整数的商

方法与BigInteger差不多,这里对除法BigDecimal divide(BigDecimal val) 进行说明:
如果进行除法运算的时候,结果不能整除,有余数,这个时候会报java.lang.ArithmeticException:
这边我们要避免这个错误产生,在进行除法运算的时候,针对可能出现的小数产生的计算,必须要多传两个参数;

格式: divide(BigDecimal bi,int num,舍入模式); // num为保留小数的位数

舍入模式

ROUND_HALF_UP 四舍五入(常用)
 ROUND_CEILING //向正无穷方向舍入
 ROUND_DOWN //向零方向舍入
 ROUND_FLOOR //向负无穷方向舍入
 ROUND_HALF_DOWN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5
 ROUND_HALF_EVEN //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP,如果是偶数,使用ROUND_HALF_DOWN
 ROUND_HALF_UP //向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6,也就是我们常说的“四舍五入”
 ROUND_UNNECESSARY //计算结果是精确的,不需要舍入模式
 ROUND_UP //向远离0的方向舍入