Java之BigDecimal介紹

最近在做項目,對於數值得精度要求比較高,需要用到大數據,於是就和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());
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章