篇一: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
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号