大数据运算 BigInteger BigDecimal
BigInteger
java中long型为最大整数类型,在Java中,超过long型的整数已经不能被称为整数了,它们被封装成BigInteger对象.在BigInteger类中,实现四则运算都是方法来实现,并不是采用运算符.
BigInteger类的构造方法:
BigInteger b = new BigInteger(str);
构造方法中,采用字符串的形式给出整数
BigDecimal
double和float类型在运算中很容易丢失精度,造成数据的不准确性,Java提供我们BigDecimal类可以实现浮点数据的高精度运算
构造方法如下:
BigDecimal b = new BigDecimal(str);
建议浮点数据以字符串形式给出,因为参数结果是可以预知的
实现加法减法乘法代码如下:(运算方法与BigInteger一致)
对于浮点数据的除法运算,和整数不同,可能出现无限不循环小数,因此需要对所需要的位数进行保留和选择舍入模式
BigDecimal b = big1.divide(big2,保留小数点后面几位,舍入模式)
BigDecimal b = big1.divide.(big2,2,BigDecimal.ROUND_DOWN)
import java.math.BigDecimal;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 大数据封装为BigInteger对象
BigInteger big1 = new BigInteger("123456789012345678901234567890");
BigInteger big2 = new BigInteger("12345678901234567890");
// add加法运算
BigInteger bigadd = big1.add(big2);
System.out.println(bigadd);
// 减法运算
BigInteger bigsub = big1.subtract(big2);
System.out.println(bigsub);
// 乘法运算
BigInteger bigmul = big1.multiply(big2);
System.out.println(bigmul);
// 除法运算
BigInteger bigdiv = big1.divide(big2);
System.out.println(bigdiv);
// 其他运算 abs?
System.out.println("-----------");
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);
System.out.println("-----------");
// 大数据封装为BigDecimal对象
BigDecimal big3 = new BigDecimal("0.09");
BigDecimal big4 = new BigDecimal("0.01");
// add实现加法运算
BigDecimal bigAdd = big3.add(big4);
System.out.println(bigAdd);
BigDecimal big5 = new BigDecimal("1.0");
BigDecimal big6 = new BigDecimal("0.32");
// subtract实现减法运算
BigDecimal bigSub = big5.subtract(big6);
System.out.println(bigSub);
BigDecimal big7 = new BigDecimal("1.105");
BigDecimal big8 = new BigDecimal("100");
// multiply实现乘法运算
BigDecimal bigMul = big7.multiply(big8);
System.out.println(bigMul);
BigDecimal big9 = new BigDecimal("1.301");
BigDecimal big10 = new BigDecimal("100");
// 除法运算
BigDecimal bigDiv = big9.divide(big10, 2, BigDecimal.ROUND_DOWN);
System.out.println(bigDiv);
}
}
123456789024691357802469135780
123456789000000000000000000000
1524157875323883675034293577501905199875019052100
10000000000
-----------
0.09999999999999999
0.6799999999999999
101.49999999999999
0.013009999999999999
-----------
0.10
0.68
110.500
0.01