大整数与大小数
大整数与大小数的作用
日常使用中,我们通常不会遇到特别大的离谱的数字。正常情况下,long类型已经足以存储所要使用的变量。但是某些特殊情况仍然无法避免使用到巨长巨长的整数。这种情况下,可以使用大整数来存储这个变量。
java.math.BigInteger
使用大整数,可以存储任意长度的整数
在平时的使用中,小数在许多时候需要解决精度丢失问题。
由于底层汇编存储为二进制,会导致存储一些小数的时候,末尾带有小尾数,这就需要控制它的精度。
java.math.BigDecimal
使用大小数,可以解决精度丢失的问题
大整数实例
计算1000的阶乘
public static void main(String[] args) {
BigInteger big = new BigInteger("1");
for (int i = 1; i <= 1000; i++) {
//把int类型的i,拼接的形式暴力转型成为BigInterger类型
big = big.multiply(new BigInteger(i +""));
}
System.out.println(big);
}
正常方式使用int类型或者long类型,会因为精度不够,只能打印出“0”。
换成BigInteger类型长度不限,即可解决。
大小数实例
小数的简单加减
使用double的情况
public static void main(String[] args) {
double b1 = 0.1;
double b2 = 0.2;
double sum = b1 + b2;
System.out.println(sum);
}
结果:
底层的汇编语言存储,会将小数也二进制化并存储在内存中,这样会导致精度不对。
使用BigDecimal的方式
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
System.out.println(b1.add(b2));
}
结果:
特殊情况下,使用大整数跟大小数,可以较好实现想要的效果。