【注意】new BigDecimal()方法初始化一個浮點型數據時,須要顯示設置Scale(精度)不然運算時可能會有精度問題(這個和BigDecimal 默認精度有關),若是轉成String再初始化,將不受影響java
BigDecimal b1 = new BigDecimal("1"); BigDecimal b2 = new BigDecimal("0.11"); System.out.println(b1.add(b2)); /* * 能夠試下把傳入的字符串改成基本數據類型再進行運算 */
BigDecimal b1 = new BigDecimal("1"); BigDecimal b2 = new BigDecimal("0.11"); System.out.println(b1.subtract(b2));
BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal("0.11"); System.out.println(b1.multiply(b2));
BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal("0.11"); //四捨五入保留兩位小數 後文將介紹舍入方式 System.out.println(b1.divide(b2,2,BigDecimal.ROUND_HALF_UP));
BigDecimal b1 = new BigDecimal("-1.11"); System.out.println(b1.abs());
BigDecimal b1 = new BigDecimal("1.11"); System.out.println(b1.negate());
BigDecimal b1 = new BigDecimal("1.11"); //二次方 System.out.println(b1.pow(2)); //三次方 System.out.println(b1.pow(3));
BigDecimal b1 = new BigDecimal("11.111"); //位數 System.out.println(b1.precision());//5 //小數點後有多少位 System.out.println(b1.scale());//3
BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal("0.11"); //大於0 則b1>b2;等於0 則b1==b2;小於0 則b1<b2 System.out.println(b1.compareTo(b2));
BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal("0.11"); System.out.println(b1.max(b2));
BigDecimal b1 = new BigDecimal("1.11"); BigDecimal b2 = new BigDecimal("0.11"); System.out.println(b1.min(b2));
BigDecimal b1 = new BigDecimal("1.1449"); System.out.println(b1.setScale(2, BigDecimal.ROUND_HALF_UP));//1.14 System.out.println(b1.setScale(3, BigDecimal.ROUND_HALF_UP));//1.145
若是捨去部分大於 0.5 則爲進一,若是是小於 0.5 則會捨去算法
BigDecimal b1 = new BigDecimal("1.1456"); System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_DOWN));//1.1 System.out.println(b1.setScale(2, BigDecimal.ROUND_HALF_DOWN));//1.15 //上例中捨去部分.56 大於.5 因此會進一
BigDecimal b1 = new BigDecimal("1.145"); System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_DOWN));//1.1 System.out.println(b1.setScale(2, BigDecimal.ROUND_HALF_DOWN));//1.14 //上例捨去部分 .5 不大於.5 因此會捨去
BigDecimal b1 = new BigDecimal("1.25"); System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_EVEN));//1.2 b1 = new BigDecimal("1.26"); System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_EVEN));//1.3 b1 = new BigDecimal("1.35"); System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_EVEN));//1.4 b1 = new BigDecimal("1.36"); System.out.println(b1.setScale(1, BigDecimal.ROUND_HALF_EVEN));//1.4
BigDecimal b1 = new BigDecimal("1.1203"); System.out.println(b1.setScale(2, BigDecimal.ROUND_UP));//1.13 System.out.println(b1.setScale(3, BigDecimal.ROUND_UP));//1.121
永遠不會減小計算值的大小ide
BigDecimal b1 = new BigDecimal("1.1209"); System.out.println(b1.setScale(2, BigDecimal.ROUND_DOWN));//1.12 System.out.println(b1.setScale(3, BigDecimal.ROUND_DOWN));//1.120
永遠不會增長計算值的大小code
BigDecimal b1 = new BigDecimal("1.1209"); System.out.println(b1.setScale(2, BigDecimal.ROUND_CEILING));//1.13 System.out.println(b1.setScale(3, BigDecimal.ROUND_CEILING));//1.121 BigDecimal b2 = b1.negate();//b1的相反數 System.out.println(b2.setScale(2, BigDecimal.ROUND_CEILING));//-1.12 System.out.println(b2.setScale(3, BigDecimal.ROUND_CEILING));//-1.120
此舍入模式始終不會減小計算值。對象
BigDecimal b1 = new BigDecimal("1.1209"); System.out.println(b1.setScale(2, BigDecimal.ROUND_FLOOR));//1.12 System.out.println(b1.setScale(3, BigDecimal.ROUND_FLOOR));//1.120 BigDecimal b2 = b1.negate(); System.out.println(b2.setScale(2, BigDecimal.ROUND_FLOOR));//-1.13 System.out.println(b2.setScale(3, BigDecimal.ROUND_FLOOR));//-1.121
注意,此舍入模式始終不會增長計算值。ip
BigDecimal b1 = new BigDecimal("1.25"); System.out.println(b1.setScale(2, BigDecimal.ROUND_UNNECESSARY));//1.25 System.out.println(b1.setScale(1, BigDecimal.ROUND_UNNECESSARY));//throw ArithmeticException
MathContext.DECIMAL32 一個 MathContext 對象,其精度設置與 IEEE 754R Decimal32 格式(即 7 個數字)匹配,舍入模式爲 HALF_EVEN,這是 IEEE 754R 的默認舍入模式。ci
MathContext.DECIMAL64 一個 MathContext 對象,其精度設置與 IEEE 754R Decimal64 格式(即 16 個數字)匹配,舍入模式爲 HALF_EVEN,這是 IEEE 754R 的默認舍入模式。字符串
MathContext.DECIMAL128 一個 MathContext 對象,其精度設置與 IEEE 754R Decimal128 格式(即 34 個數字)匹配,舍入模式爲 HALF_EVEN,這是 IEEE 754R 的默認舍入模式。it
MathContext.UNLIMITED 其設置具備無限精度算法所需值的 MathContext 對象。io
【注】詳見第二部分:舍入方式