BigDecimal的四則運算及小數位數格式


一、加法

BigDecimal b1 = new BigDecimal("20");
BigDecimal b2 = new BigDecimal("30");
BigDecimal add = b1.add(b2);
System.out.println(add);

打印結果:
50

二、減法

BigDecimal b1 = new BigDecimal("53.22");
BigDecimal b2 = new BigDecimal("25.14");
BigDecimal subtract = b1.subtract(b2);
System.out.println(subtract);

打印結果:
28.08
說明:
b1是被減數,b2是減數,小的減大的得負數,不報錯

 三、乘法

BigDecimal b1 = new BigDecimal("2");
BigDecimal b2 = new BigDecimal("3");
BigDecimal multiply = b1.multiply(b2);
System.out.println(multiply);
打印結果:
6

BigDecimal b1 = new BigDecimal("2.30");
BigDecimal b2 = new BigDecimal("3.0");
BigDecimal multiply = b1.multiply(b2);
System.out.println(multiply);

打印結果:
6.900
說明:
小數相乘,不加限制的情況下,計算的結果小數點的保有量是兩積數小數點位數之和

四、除法(分母不能為0)

總體說明:b1為被除數,b2為除數
BigDecimal b1 = new BigDecimal("30"); BigDecimal b2 = new BigDecimal("3"); BigDecimal divide = b2.divide(b1); System.out.println(divide);
打印結果:
0.1
說明:只能運算可以除盡的運算。

BigDecimal b1 = new BigDecimal("10");
BigDecimal b2 = new BigDecimal("3");
BigDecimal divide = b1.divide(b2,3,RoundingMode.HALF_DOWN);
System.out.println(divide);
打印結果:
3.333
說明:第一個參數(b2):除數
第二個參數(3):小數點之后保留幾位
第三個參數(RoundingMode.HALF_DOWN):舍入模式
舍入模式參數說明(加入數軸概念):

         RoundingMode.CEILING:取右邊最近的整數

         RoundingMode.DOWN:去掉小數部分取整,也就是正數取左邊,負數取右邊,相當於向原點靠近的方向取整

         RoundingMode.FLOOR:取左邊最近的正數

         RoundingMode.HALF_DOWN:五舍六入,負數先取絕對值再五舍六入再負數

         RoundingMode.HALF_UP:四舍五入,負數原理同上

         RoundingMode.HALF_EVEN:這個比較繞,整數位若是奇數則四舍五入,若是偶數則五舍六入

 五、小數位數和取值的格式化

BigDecimal bigDecimal = new BigDecimal("2.35645");
System.out.println("原始的" + bigDecimal);
BigDecimal bigDecimal1 = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("格式化后" + bigDecimal1);

打印結果:
原始的2.35645
格式化后2.36
setScale()方法參數介紹:
第一個參數:小數點后保留的位數
第二個參數:舍入模式
舍入模式列舉:
setScale(1)表示保留一位小數,默認用四舍五入方式 這種模式可能會有問題,可能會報(java.lang.ArithmeticException: Rounding necessary),請測試后使用
setScale(1,BigDecimal.ROUND_DOWN)直接刪除多余的小數位,如2.35會變成2.3 數據取整可用(向下取整)
setScale(1,BigDecimal.ROUND_UP)進位處理,2.35變成2.4 數據取整可用 (向上取整)
setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35變成2.4
setScaler(1,BigDecimal.ROUND_HALF_DOWN)五舍六入,2.55變成2.5/2.551變成2.6,如果是5則向下舍
setScaler(1,BigDecimal.ROUND_CEILING)接近正無窮大的舍入
setScaler(1,BigDecimal.ROUND_FLOOR)接近負無窮大的舍入,數字>0和ROUND_UP作用一樣,數字<0和ROUND_DOWN作用一樣
setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的數字舍入,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。

 六、去掉小數點后以0結尾的0

System.out.println(new BigDecimal("100.000").stripTrailingZeros().toPlainString());
輸出為 100 toPlainString 是為了防止科學計數顯示

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM