BigDecimal加減乘除計算及舎入模式

運算函數

  • 加法 add()函數
  • 減法subtract()函數
  • 乘法multiply()函數
  • 除法divide()函數
  • 絕對值abs()函數

示例

BigDecimal num1 = new BigDecimal(100);
BigDecimal num2 = new BigDecimal(-100);
BigDecimal num3 = new BigDecimal("0.5");
BigDecimal num4 = new BigDecimal("0.7");
BigDecimal add = num1.add(num2);
BigDecimal subtract = num1.subtract(num2);
BigDecimal multiply = num3.multiply(num4);
BigDecimal divide = num3.divide(num4,2,BigDecimal.ROUND_UP);
BigDecimal abs = num2.abs();
System.out.println(add);
System.out.println(subtract);
System.out.println(multiply);
System.out.println(divide);
System.out.println(abs);

結果

0
200
0.35
0.72
100

除法中的舎入模式

1、ROUND_UP

直接丟棄保留位數後的值,並且最後一位加1。

該舍入模式使值變大。

2、ROUND_DOWN

直接丟棄保留位數後的值。

該舍入模式會減少計算值的大小。

3、ROUND_CEILING

如果 BigDecimal 爲正,則舍入行爲與 ROUND_UP 相同;如果爲負,則舍入行爲與 ROUND_DOWN 相同。

該舍入模式使值變大。

4、ROUND_FLOOR

如果 BigDecimal 爲正,則舍入行爲與 ROUND_DOWN 相同;如果爲負,則舍入行爲與 ROUND_UP 相同。

該舍入模式會減少計算值的大小。

5、ROUND_HALF_UP

四捨五入。

如果捨棄部分 >= 5,則舍入行爲與 ROUND_UP 相同;否則舍入行爲與 ROUND_DOWN 相同。

注意,這是我們大多數人在小學時就學過的舍入模式(四捨五入)。

6、ROUND_HALF_DOWN

五舍六入

如果捨棄部分 > 5,則舍入行爲與 ROUND_UP 相同;否則舍入行爲與 ROUND_DOWN 相同。

7、ROUND_HALF_EVEN

銀行家舍入。

四捨六入,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。

如果保留位數的最後一位爲奇數,則入位,否則捨去。比如2.15、2.24、2.25在該舎入模式下都是2.2;2.26舎入後是2.3。

8、ROUND_UNNECESSARY

斷言請求的操作具有精確的結果,因此不需要舍入(默認模式)。

如果對獲得精確結果的操作指定此舍入模式,則拋出ArithmeticException。

注意事項

在使用BigDecimal做乘除運算時,要把浮點型變成字符串進行構造,比如num3、num4。因爲不是所有的浮點數都能夠被精確的表示成一個double 類型值,對於那些不能夠被精確的表示成 double 類型的浮點值,它會被表示成與它最接近的double類型的值。所以,構造BigDecimal時必須要把浮點型變成字符串進行構造。

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