篇一:BigDecimal

一、Java中BigDecimal的使用

1、类型转换

  int与bigDecimal转换

//BigDecimal转int
BigDecimal a=new BigDecimal(12.88);
int b=a.intValue();
//int转BigDecimal
int i = 3;
BigDecimal datad = new BigDecimal(i);

  String与bigDecimal转换

//String转BigDecimal
String number = "335";
BigDecimal datad = new BigDecimal(number );
//BigDecimal转String 
BigDecimal bd = new BigDecimal("152");
String str = bd.toString();

  double转bigDecimal

//BigDecimal转换double
BigDecimal a = new BigDecimal(1000);
double data = a.doubleValue();
//double转换BigDecimal
double v = 13.33;
BigDecimal b =  new  BigDecimal(Double.toString(v));
//double转换BigDecimal
double v = 13.33;
BigDecimal b =  new  BigDecimal(v);

2、bgiDecimal加减乘除

public static double add(double d1, double d2)
{
 // 进行加法运算
 BigDecimal b1 = new BigDecimal(d1);
 BigDecimal b2 = new BigDecimal(d2); 
 return b1.add(b2).doubleValue();
 }
public static double sub(double d1, double d2)
{ 
 // 进行减法运算
 BigDecimal b1 = new BigDecimal(d1);
 BigDecimal b2 = new BigDecimal(d2);
 return b1.subtract(b2).doubleValue();
 }
public static double mul(double d1, double d2)
{ 
 // 进行乘法运算
 BigDecimal b1 = new BigDecimal(d1);
 BigDecimal b2 = new BigDecimal(d2);
 return b1.multiply(b2).doubleValue();
}
public static double div(double d1,double d2,int len) 
{
 // 进行除法运算
 BigDecimal b1 = new BigDecimal(d1);
 BigDecimal b2 = new BigDecimal(d2);
 return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();
}

d1.divide(d2,2,BigDecimal.ROUND_HALF_UP) ,(d1除以d2保留两位小数,按ROUND_HALF_UP方式舍入处理)

注:除法时,当小数无限循环会抛异常,需要设置精度

二、BigDecimal小数舍入模式

 

ROUND_CEILING:   舍位时往正无穷方向移动   1.1-> 2   1.5-> 2   1.8-> 2   -1.1-> -1   -1.5-> -1   -1.8-> -1 
ROUND_DOWN:向0的方向移动1.1-> 1   1.5-> 1   1.8-> 1   -1.1-> -1   -1.5-> -1   -1.8> -1 
ROUND_FLOOR:与CEILING相反,往负无穷   1.1-> 1   1.5-> 1   1.8-> 1   -1.1-> -2   -1.5-> -2   -1.8-> -2 
ROUND_HALF_DOWN:以5为分界线,或曰五舍六入1.5-> 1   1.6-> 1   -1.5-> -1   -1.6-> -2   
ROUND_HALF_EVEN:同样以5为分界线,如果是5,则前一位变偶数1.15-> 1.2   1.16-> 1.2   1.25-> 1.2   1.26-> 1.3 
ROUND_HALF_UP:最常见的四舍五入 
UNNECESSARY:无需舍位 
ROUND_UP:与ROUND_DOWN,远离0的方向1.1-> 2   1.5-> 2   1.8-> 2   -1.1-> -2   -1.5-> -2   -1.8-> -2

 

public static void main(String[] args) {
        
        BigDecimal d1 = new BigDecimal(1);
        BigDecimal d2 = new BigDecimal(7);
        System.out.println(d1.divide(d2, 5,BigDecimal.ROUND_CEILING));
        System.out.println(d1.divide(d2, 3,BigDecimal.ROUND_CEILING));
        System.out.println(d1.divide(d2, 3,BigDecimal.ROUND_DOWN));
        System.out.println(d1.divide(d2, 3,BigDecimal.ROUND_FLOOR));
        System.out.println(d1.divide(d2, 3,BigDecimal.ROUND_HALF_DOWN));
        System.out.println(d1.divide(d2, 3,BigDecimal.ROUND_HALF_EVEN));
        System.out.println(d1.divide(d2, 3,BigDecimal.ROUND_HALF_UP));
        
        System.out.println(d1.divide(d2, 2,BigDecimal.ROUND_CEILING));
        System.out.println(d1.divide(d2, 2,BigDecimal.ROUND_DOWN));
        System.out.println(d1.divide(d2, 2,BigDecimal.ROUND_FLOOR));
        System.out.println(d1.divide(d2, 2,BigDecimal.ROUND_HALF_DOWN));
        System.out.println(d1.divide(d2, 2,BigDecimal.ROUND_HALF_EVEN));
        System.out.println(d1.divide(d2, 2,BigDecimal.ROUND_HALF_UP));
    }
0.14286
0.143
0.142
0.142
0.143
0.143
0.143
0.15 0.14 0.14 0.14 0.14 0.14

 

posted @ 2016-11-15 15:00  刘广平  阅读(193)  评论(0)    收藏  举报