大数据运算 BigInteger BigDecimal
大数据运算 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