java.math包中的BigInteger和BigDecimal

    有时可能碰到需要计算非常大的数,它可能已经超出了Long,Double的范围,如66666666666666*666666666666666,这时就需要进行大数操作。
    在java.math这个包中有两个进行大数操作的类:java.math.BigInteger和java.math.BigDecimal,前者进行整数的大数操作,后者进行小数的大数操作。
    在这里对这两个类进行简单的介绍,来看看下面的实例:
    首先是BigInteger:


    import java.math.BigInteger;


    public class TestBigInteger {
public static void main(String[] args){
String num1 = "3435345346346343543545";
String num2 = "423413534634643634643";
BigInteger b1 = new BigInteger(num1);
BigInteger b2 = new BigInteger(num2);

System.out.println("加法操作: "+b1.add(b2));
System.out.println("减法操作: "+b1.subtract(b2));
System.out.println("乘法操作: "+b1.multiply(b2));
System.out.println("除法操作: "+b1.divide(b2));

BigInteger[] b = b1.divideAndRemainder(b2); //返回包含 (this / val) 后跟 (this % val) 的两个 BigInteger 的数组。
System.out.println("b1/b2后的结果: "+b[0]);
System.out.println("b1%b2后的结果: "+b[1]);
}
    }
    BigInteger的构造方法public BigInteger(String val)是 将 BigInteger 的十进制字符串表示形式转换为 BigInteger。同样,大整数操作可以像其它类型的数据一样进行加法、减法、乘法、除法等操作。
    public BigInteger divide(BigInteger val)这个方法只能得到一个“商“,要想的到余数需要用public BigInteger[] divideAndRemainder(BigInteger val)这个方法。divideAndRemainder()这个方法返回的是存储有”商“和”余数“的BigInteger数组。
    接下来是BigDecimal的用法:
    import java.math.BigDecimal;


    public class TestBigDecimal {
public static void main(String[] args){
String num1 = "954.333333333";
String num2 = "936.55";

//加法运算,保留5位小数
System.out.println("加: "+TestBigDecimal.round(TestBigDecimal.add(num1,num2),5));
//减法运算,保留5位小数
System.out.println("减: "+TestBigDecimal.round(TestBigDecimal.subtract(num1,num2),5));
//乘法运算,保留5位小数
System.out.println("乘: "+TestBigDecimal.round(TestBigDecimal.multiply(num1,num2),5));
//除法运算,保留2位小数
System.out.println("除: "+TestBigDecimal.divide(num1,num2,2));
}


public static double add(String num1,String num2){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
return b1.add(b2).doubleValue();   //doubleValue将此 BigDecimal转换为 double类型
}
public static double subtract(String num1,String num2){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
return b1.subtract(b2).doubleValue();
}
public static double multiply(String num1,String num2){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
return b1.multiply(b2).doubleValue();
}
public static double divide(String num1,String num2,int scale){
BigDecimal b1 = new BigDecimal(num1);
BigDecimal b2 = new BigDecimal(num2);
                //下面的scale表示需要保留的小数位数,“BigDecimal.ROUND_HALF_UP”常量表示的是四舍五入的模式,其他模式详见Api
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
private static double round(double num,int scale) {
BigDecimal b1 = new BigDecimal(num);
BigDecimal b2 = new BigDecimal(1);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();//任何数除于1都等于本身
}
}
      上面的例子重新包装了BigDecimal的加减乘除操作,使这些方法的使用更符合本例的需要。加减乘的操作就不用多说了,很直接,很简单,需要说明的还是除法操作。 
BigDecimal的除法重载了很多。其中有一种是public BigDecimal divide(BigDecimal divisor,int scale,RoundingMode roundingMode)。这种方法指定了保留的小数位数(scale)和四舍五入的模式(roundingMode)。比如,“ROUND_HALF_DOWN“的模式表示向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为上舍入的舍入模式。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值