// 加法 BigDecimal bigDecimal1 = new BigDecimal(100.22).add(new BigDecimal(0.01)); // 減法 BigDecimal bigDecimal2 = new BigDecimal(100.22).subtract(new BigDecimal(0.22)); // 乘法 BigDecimal bigDecimal3 = new BigDecimal(100.22).multiply(new BigDecimal(0.01)); // 除法 BigDecimal bigDecimal4 = new BigDecimal(100.22).divide(new BigDecimal(1));
bigDecimal1=100.22999999999999886333978960095691945753060281276702880859375 bigDecimal2=99.9999999999999988620213997592145460657775402069091796875 bigDecimal3=1.00220000000000000949379463932586962963930873545808557374705541516413109803806946729309856891632080078125 bigDecimal4=100.219999999999998863131622783839702606201171875
根據以上運算的輸出結果來看,用以肯定精度的小數構造、或計算產生的BigDecimal類型都會自動補上小數位,通常在正常業務操做時,都會對Bigdecimal類型的結果進行手動小數位保留java
BigDecimal.setScale( )方法ide
new BigDecimal(100.245).setScale(2, RoundingMode.HALF_UP); // 100.25 new BigDecimal(100.245).setScale(2, BigDecimal.ROUND_HALF_UP) // 100.25
上面了兩種用法同樣,都是 保留兩位小數,舍入模式爲 四捨五入,spa
其餘經常使用舍入模式有:code
setScale(1,BigDecimal.ROUND_DOWN) //直接刪除多餘的小數位,如2.35會變成2.3 setScale(1,BigDecimal.ROUND_UP) //進位處理,2.35變成2.4 setScaler(1,BigDecimal.ROUND_HALF_DOWN) //四捨五入,2.35變成2.3,若是是5則向下舍
new BigDecimal(100).setScale(2) 會進行補指定的小數位ip
new BigDecimal(100.25).setScale(1) 就會報出異常 java.lang.ArithmeticException: Rounding necessary , 緣由是 對100.259999999....取兩位小數,精度丟失 又沒指定舍入的模式,指定舍入模式就可解決ci
....it