java基礎-BigDecimal類常用方法介紹
作者:尹正杰
版權聲明:原創作品,謝絕轉載!否則將追究法律責任。
?
?
?
?
一.BigDecimal類概述
? 我們知道浮點數的計算結果是未知的。原因是計算機二進制中,表示浮點數不精確造成的。這個時候你需要一個超級大型的浮點數據,并且提供高精度的浮點運算,也就是我們要說的BigDecimal。
不可變的、任意精度的有符號十進制數。BigDecimal 由任意精度的整數非標度值 和 32 位的整數標度 (scale) 組成。如果為零或正數,則標度是小數點后的位數。如果為負數,則將該數的非標度值乘以 10 的負 scale 次冪。因此,BigDecimal 表示的數值是 (unscaledValue × 10-scale)。BigDecimal 類提供以下操作:算術、標度操作、舍入、比較、哈希算法和格式轉換。toString()
方法提供 BigDecimal 的規范表示形式。
BigDecimal 類使用戶能完全控制舍入行為。如果未指定舍入模式,并且無法表示準確結果,則拋出一個異常;否則,通過向該操作提供適當的 MathContext
對象,可以對已選擇的精度和舍入模式執行計算。在任何情況下,可以為舍入控制提供八種舍入模式。使用此類(例如,ROUND_HALF_UP
)中的整數字段來表示舍入模式已過時;應改為使用 RoundingMode enum(例如,RoundingMode.HALF_UP
)的枚舉值。??
二.BigDecimal類實現加法,減法和乘法的案例展示
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.demo; 8 9 import java.math.BigDecimal; 10 11 public class BigDecimalDemo { 12 public static void main(String[] args) { 13 function(); 14 } 15 16 public static void function() { 17 BigDecimal a = new BigDecimal("0.009"); 18 BigDecimal b = new BigDecimal("0.001"); 19 //計算a+b的和,調用add方法 20 BigDecimal sum = a.add(b); 21 System.out.println(sum); 22 23 BigDecimal x = new BigDecimal("1.1"); 24 BigDecimal y = new BigDecimal("0.28"); 25 BigDecimal sub = x.subtract(y); 26 System.out.println(sub); 27 28 BigDecimal m = new BigDecimal("3.14"); 29 BigDecimal n = new BigDecimal("100"); 30 BigDecimal mul = m.multiply(n); 31 System.out.println(mul); 32 } 33 } 34 35 36 37 /* 38 以上代碼執行結果如下: 39 0.010 40 0.82 41 314.00 42 */
?
三.BIgDecimal類實現除法
?
1 /* 2 @author :yinzhengjie 3 Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/ 4 EMAIL:y1053419035@qq.com 5 */ 6 7 package cn.org.yinzhengjie.demo; 8 9 import java.math.BigDecimal; 10 11 public class BigDecimalDemo { 12 public static void main(String[] args) { 13 function(); 14 } 15 16 public static void function() { 17 BigDecimal a = new BigDecimal("9.8"); 18 BigDecimal b = new BigDecimal("3"); 19 //計算a/b的商,調用divied方法, 20 // BigDecimal div = a.divide(b); //如果除不盡的話會拋出異常:java.lang.ArithmeticException。 21 // BigDecimal div = a.divide(b,3,BigDecimal.ROUND_UP); //保留三位小數,向上加1 22 // BigDecimal div = a.divide(b,3,BigDecimal.ROUND_DOWN); //保留三位小數,直接舍去 23 // BigDecimal div = a.divide(b,3,BigDecimal.ROUND_HALF_UP); //保留三位小數,當ROUND_HALF_UP>=0.5時,和ROUND_UP功能相同(即向上加1)。 24 BigDecimal div = a.divide(b,3,BigDecimal.ROUND_HALF_DOWN); //保留三位小數,如果舍棄部分>0.5時,則舍入行為與ROUN_UP相同(向上加1),否則舍入行為與ROUND_DOWN相同。 25 System.out.println(div); 26 } 27 } 28 29 30 31 /* 32 以上代碼執行結果如下: 33 3.267 34 */
?