最近在做项目,对于数值得精度要求比较高,需要用到大数据,于是就和BigDecimal 打交道,发现BigDecimal 与Java基本类型的用法不同,特总结如下,希望对初学者有所帮助。
import java.math.BigDecimal;
import java.text.DecimalFormat;
public class BigDecimalDemo {
public static void main(String[] args) {
BigDecimal a = new BigDecimal(100);//初始化BigDecimal
BigDecimal b = new BigDecimal(20);//初始化BigDecimal
BigDecimal c = new BigDecimal(123456.7897);//初始化BigDecimal
BigDecimalDemo demo = new BigDecimalDemo();
//计算两个BigBigDecimal 的和
BigDecimal result1 = demo.add(a, b);
BigDecimal result2 = demo.substract(a, b);
BigDecimal result3 = demo.multiply(a, b);
BigDecimal result4 = demo.divide(a, b);
String result5 = demo.formateBigDecimal(c);
System.err.println("计算两个a与b 的和 :"+result1);
System.err.println("计算两个a与b 的差 :"+result2);
System.err.println("计算两个a与b 的乘积 :"+result3);
System.err.println("计算两个a与b 的除法 :"+result4);
System.err.println("格式化 :"+result5);
}
/**
*
* 功能说明:加法
* @param a
* @param b
* @return
* @author: 石玉良
* @DATE:2014-1-8 @TIME: 下午3:58:22
*/
public BigDecimal add(BigDecimal a,BigDecimal b){
if(a!=null&&b!=null){
return a.add(b);
}
return null;
}
/**
*
* 功能说明:减法
* @param a
* @param b
* @return
* @author: 石玉良
* @DATE:2014-1-8 @TIME: 下午3:58:41
*/
public BigDecimal substract(BigDecimal a,BigDecimal b){
if(a!=null&&b!=null){
return a.subtract(b);
}
return null;
}
/**
*
* 功能说明:乘法
* @param a
* @param b
* @return
* @author: 石玉良
* @DATE:2014-1-8 @TIME: 下午3:58:56
*/
public BigDecimal multiply(BigDecimal a,BigDecimal b){
if(a!=null&&b!=null){
return a.multiply(b);
}
return null;
}
/**
*
* 功能说明:除法
* @param a
* @param b
* @return
* @author: 石玉良
* @DATE:2014-1-8 @TIME: 下午3:59:10
*/
public BigDecimal divide(BigDecimal a,BigDecimal b){
//两个数相除时需要考虑分母为0的情况
//compareTo 方法,
//返回 0 a==b
//返回 -1 a<b
//返回 1 a >b
if(b.compareTo(new BigDecimal(0))!=0){
return a.divide(b, 2,BigDecimal.ROUND_HALF_UP);
}
return null;
}
/**
*
* 功能说明:格式化显示 千分位 保留两位有效小数
* @param a
* @return
* @author: 石玉良
* @DATE:2014-1-8 @TIME: 下午4:10:24
*/
public String formateBigDecimal(BigDecimal a){
if(a==null){
return "";
}else{
DecimalFormat df = new DecimalFormat("###,##0.00");
return df.format(a.doubleValue());
}
}
}