BigInteger和BigDecimal是大型数字(通常在金融、工程、科学等等领域使用)
大型整数:BigInteger
大型浮点数:BigDecimal
创建时,通常使用”字符串“传入”原始值“
常见运算
- 加法:add()
- 减法:subtract()
- 乘法:multiply()
- 除法:divide()
- 幂运算:pow()
- 比较:compareTo()
使用BigInteger保存"超大整数"
import java.math.BigInteger;
public class Test {
public static void main(String[] args) {
//整数类型溢出
// int n1 = 214748647,n2 = 214748647;
// int sum1 = n1+n2;
// System.out.println(sum1);
// //使用BigInteger保存"超大整数"
BigInteger n1 = new BigInteger("32748356705238748959");
BigInteger n2 = new BigInteger("32748356705238748958");
//通过调用方法,进行:"加减乘除"运算
//加法
BigInteger sum = n1.add(n2);
System.out.println(sum);
//减法
BigInteger sub = n1.subtract(n2);
System.out.println(sub);
//乘法
BigInteger mul = n1.multiply(n2);
System.out.println(mul);
//除法
BigInteger div = n1.divide(n2);
System.out.println(div);
//混合运算:n1*n2+n3
BigInteger n3 = new BigInteger("1000");
BigInteger ret = n1.multiply(n2).add(n3);
System.out.println(ret);
}
}
如果使用int会溢出
65496713410477497917
1
1072454866893555729136867484550184834722
1
1072454866893555729136867484550184835722
使用BigDecimal保存"超大浮点数"
浮点数的除法运算,容易产生无限循环
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Test {
public static void main(String[] args) {
BigDecimal dec1 = new BigDecimal("10.0");
BigDecimal dec2 = new BigDecimal("3.0");
BigDecimal sum = dec1.add(dec2);
System.out.println(sum);
// 浮点数的除法运算,容易产生无限循环
// 参数1: 被除数
// 参数2: 保留3位小数
// 参数3: 小数位数的截取保留方式
BigDecimal div = dec1.divide(dec2,3,RoundingMode.HALF_DOWN);
System.out.println(div);
}
}
//RoundingMode.HALF DOWN代表四舍五入
13.0
3.333