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

 

posted @ 2023-03-26 20:36  整合侠  阅读(40)  评论(0编辑  收藏  举报