java 大数据运算 BigInteger BigDecimal

package cn.sasa.demo5;

import java.math.BigDecimal;
import java.math.BigInteger;

public class BigDataDemo {
    public static void main(String[] args) {
        //BigInteger
        //数字太大,超过了long的范围
        //long num1 = 9999999999999999999999999999999999999999999999L;
        BigInteger num1 = new BigInteger("999999999999999999999999999999999477");
        BigInteger num2 = new BigInteger("77777597111111111111111117777");
        //加法
        BigInteger addNum = num1.add(num2);
        System.out.println(addNum);
        
        //减法
        BigInteger subNum = num1.subtract(num2);
        System.out.println(subNum);
        
        //乘法
        BigInteger mulNum = num1.multiply(num2);
        System.out.println(mulNum);
        
        //除法
        BigInteger divNum = num1.divide(num2);
        System.out.println(divNum);
        
        //BigDecimal
        //double 会造成精度不准确
//        double num3 = 0.01 + 0.09;
//        System.out.println(num3);//0.09999999999999999
//        System.out.println(0.03-0.01);//0.019999999999999997
//        System.out.println(1.0023 * 100);//100.22999999999999
//        System.out.println(1.301 / 100);//0.013009999999999999
        
        BigDecimal deci1 = new BigDecimal("0.01");
        BigDecimal deci2 = new BigDecimal("0.09");
        
        BigDecimal addDeci = deci1.add(deci2);
        System.out.println(addDeci);//0.10
        
        BigDecimal deci3 = new BigDecimal("0.03");
        BigDecimal deci4 = new BigDecimal("0.01");
        BigDecimal subDeci = deci3.subtract(deci4);
        System.out.println(subDeci);//0.02
        
        BigDecimal deci5 = new BigDecimal("1.0023");
        BigDecimal deci6 = new BigDecimal("100");
        BigDecimal mulDeci = deci5.multiply(deci6);
        System.out.println(mulDeci);//100.2300
        
        BigDecimal deci7 = new BigDecimal("1.301");
        BigDecimal diviDeci = divideBigDecimal(deci7, deci3);
        System.out.println(diviDeci);
        
    }
    
    //BigDecimal 的除法运算
    static BigDecimal divideBigDecimal(BigDecimal num1, BigDecimal num2) {
        /**
         * BigDecimal 除不尽会抛异常,解决方式:
         * divide(divisor, scale, roundingMode)
         * divisor 除数
         * scale 保留几位小数
         * roundingMode 保留模式
         *   static int ROUND_UP  向上+1
         *   static int ROUND_DOWN 直接舍去
         *   static int ROUND_HALF_UP  >= 0.5 向上+1
         *   static int ROUND_HALF_DOWN   > 0.5 向上+1 ,否则直接舍去
         */
        @SuppressWarnings("deprecation")
        BigDecimal rs = num1.divide(num2, 2, BigDecimal.ROUND_DOWN); //jdk9 之后会警告这个方法已过期
        //BigDecimal rs = num1.divide(num2);
        return rs;
    }
}

 

posted @ 2018-12-17 14:20  SasaL  Views(410)  Comments(0Edit  收藏  举报