淺析java中BigDecimal大數值類的使用
BigDecimal 由任意精度的整數非標度值 和 32 位的整數標度 (scale) 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負 scale 次冪。因此,BigDecimal 表示的數值是 (unscaledValue × 10-scale)。可以處理任意長度的浮點數運算。
BigDecimal的實現利用到了BigInteger, 所不同的是BigDecimal加入了小數位的概念,比如BigDecimal d = new BigDecimal(new BigInteger(num),5);5表示的是5個小數位。BigDecimal可以用來做超大的浮點數的運算,比如+-*/的運算,其中除法運算是最複雜的,因為商的位數還有除不斷的情況下末位小數點的處理都是需要考慮的。
具體使用
計算:
加: a.add(b);
減: a.subtract(b);
乘: a.multiply(b);
除: a.divide(b,2);//2為精度取值
下面我們來看看除法的詳細說明: divide(BigDecimal divisor, int scale, int roundingMode)
BigDecimal的setScale方法
BigDecimal.setScale()
方法用於格式化小數點
表示保留一位小數,預設用四捨五入方式
setScale(1)
直接刪除多餘的小數位,如2.35會變成2.3 setScale(1,BigDecimal.ROUND_DOWN)
進位處理,2.35變成2.4 setScale(1,BigDecimal.ROUND_UP)
四捨五入,2.35變成2.4 setScale(1,BigDecimal.ROUND_HALF_UP)
四舍五入,2.35變成2.3,如果是5則向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN)
更多模式請查詢API
注意點一
scale指的是你小數點後的位數。 scale()就是BigDecimal類中的方法。如 BigDecimal b = new BigDecimal("123.456"); b.scale()返回的就是3
注意點二
roundingMode是小數的保留模式。它們都是BigDecimal中的常量欄位, 有很多種,如 BigDecimal.ROUND_HALF_UP表示的就是4舍5入