/** * */ package edu.fjut.bignumber; import java.math.BigInteger; /** * * 大数操作指的是操作的数字非常大,大到超过其数据类型的表示范围 * 如:999999999999999999999999999*9999999999999999999999999 * 所以此时就需要使用对象的形式进行操作,在以前若碰到此问题,实际 * 上都是采用字符串的形式进行处理的(进行拆分、一位一位的计算)。 * * 在Java中为了解决这样的难题,提供了两个大数据对象: * BigInteger(大整数)、BigDecimal(大浮点数)decimal为小数的意思 */ public class BigNumberDemo { public static void main(String[] args) { String num1="9999999999999999999999"; String num2="8888888888888888888888"; BigInteger bg1=new BigInteger(num1);//实例化BigInteger对象 BigInteger bg2=new BigInteger(num2); System.out.println("加法操作:"+bg1.add(bg2)); System.out.println("减法操作:"+bg1.subtract(bg2)); System.out.println("乘法操作:"+bg1.multiply(bg2)); System.out.println("除法操作:"+bg1.divide(bg2));//只得到商值,无余数 BigInteger []result=bg1.divideAndRemainder(bg2);//相除之后有余数 System.out.println("相除之后的商值为"+result[0]);//第一个值为商值 System.out.println("相除之后的余数为"+result[1]);//第二个值为余数 } /*输出结果为: * 加法操作:18888888888888888888887 * 减法操作:1111111111111111111111 * 乘法操作:88888888888888888888871111111111111111111112 * 除法操作:1 * 相除之后的商值为1 * 相除之后的余数为1111111111111111111111 */ }
/** * */ package edu.fjut.bignumber; import java.math.BigDecimal; /** * BigDecimal类的主要功能是进行小数的大数据计算,最重要的 * 一点是,计算结果可以精确到指定的四舍五入位数. * * 如果想要进行四舍五入操作,则必须依靠依靠以下方法: * public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode) * --scale表示四舍五入的位数 * --roundingMode表示四舍五入的操作模式,ROUND_HALF_UP...... */ class MyMath{ public static double add(String num1,String num2){ BigDecimal bd1=new BigDecimal(num1); BigDecimal bd2=new BigDecimal(num2); return bd1.add(bd2).doubleValue();//拆箱 } public static double sub(String num1,String num2){ BigDecimal bd1=new BigDecimal(num1); BigDecimal bd2=new BigDecimal(num2); return bd1.subtract(bd2).doubleValue(); } public static double mul(String num1,String num2){ BigDecimal bd1=new BigDecimal(num1); BigDecimal bd2=new BigDecimal(num2); return bd1.multiply(bd2).doubleValue();//拆箱 } public static double div(String num1,String num2,int scale){ BigDecimal bd1=new BigDecimal(num1); BigDecimal bd2=new BigDecimal(num2); return bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); } public static double round(double num,int scale){ BigDecimal bd1=new BigDecimal(num); BigDecimal bd2=new BigDecimal(1); return bd1.divide(bd2,scale,BigDecimal.ROUND_HALF_UP).doubleValue(); } } public class BigDecimalDemo { public static void main(String[] args) { String num1="39379.23412"; String num2="68258.73529"; System.out.println("加法操作:"+MyMath.add(num1, num2)); System.out.println("加法操作,四舍五入(保留二位):"+MyMath.round(MyMath.add(num1, num2),2)); System.out.println("除法操作,四舍五入(保留三位):"+MyMath.div(num1, num2,3)); } /*输出结果为: * 加法操作:107637.96941 * 加法操作,四舍五入(保留二位):107637.97 * 除法操作,四舍五入(保留三位):0.577 */ }