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; } }