一般來說,BigInteger用的不是很多,BigDecimal用的稍微多一點,就比如說JDBC中,如果一個字段的數據庫類型是Number, 那么getObject().getClass()的結果是java.math.BigDecimal。
BigInteger相比Integer的確可以用big來形容。它是用於科學計算,Integer只能容納一個int, 所以最大值也就是2的31次訪減去1,十進制為2147483647,如果需要計算更大的數,那么31位顯然是不夠用了,BigInteger能夠容納的位數那可就大了,我簡單試了一下,上千位沒有任何問題。除了容量大之外,BigInteger還封裝了一些常見的操作,比如+-*/的基本操作,還有絕對值,相反數,最大公約數,是否是質數等等的運算。
BigDecimal的實現利用到了BigInteger, 所不同的是BigDecimal加入了小數位的概念,比如BigDecimal d = new BigDecimal(new BigInteger(ib),5);5表示的是5個小數位。BigDecimal可以用來做超大的浮點數的運算,比如+-*/的運算,其中除法運算是最復雜的,因為商的位數還有除不斷的情況下末位小數點的處理都是需要考慮的。
new BigDecimal(-7.5).divide(new BigDecimal(1),0,BigDecimal.ROUND_UP);
上面的這個運算中divide的第二個參數表示商的小數點位數,最后一個參數指的是近似處理的模式。一共有一下幾個模式:
BigDecimal.ROUND_UP 最后一位如果大於0,則向前進一位,正負數都如此。
BigDecimal.ROUND_DOWN 最后一位不管是什么都會被舍棄。
BigDecimal.ROUND_CEILING 如果是正數,按ROUND_UP處理,如果是負數,按照ROUND_DOWN處理。例如7.1->8; -7.1->-7;所以這種近似的結果都會>=實際值。
BigDecimal.ROUND_FLOOR 跟BigDecimal_ROUND_CEILING相反。例如7.1->7;-7.1->-8。這種處理的結果<=實際值。
BigDecimal.ROUND_HALF_DOWN 如果最后一位<=5則舍棄,如果>5, 向前進一位。如7.5->7;7.6->8;-7.5->-7
BigDecimal.ROUND_HALF_UP 如果最后一位<5則舍棄,如果>=5, 向前進一位。反之舍棄。如7.5->8;7.4->7;-7.5->-8
BigDecimal.ROUND_HALF_EVEN 如果倒數第二位是奇數,按照BigDecimal.ROUND_HALF_UP處理,如果是偶數,按照BigDecimal.ROUND_HALF_DOWN來處理。如7.5->8;8.5->8;7.4->7;-7.5->-8
摘自:http://hi.baidu.com/wife_linux/item/1b5b147c3fe4d819d0dcb309