篇一: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号