關於金錢的計算經常會用到BigDecimal,其中精度和四捨五入是個容易忘記的點,專門記錄下
下面的例子是兩個bigdecimal相除,並保留十位小數。
BigDecimal totalMoney = new BigDecimal(99);
BigDecimal totalPerson = new BigDecimal(5);
BigDecimal money = totalMoney.divide(totalPerson,10,BigDecimal.ROUND_HALF_UP);
divide方法有三個參數,第一個是除數,第二個scale是小數點後保留的位數,第三個是進位方式,
BigDecimal.ROUND_UP 要舍入的小數總是向前一位進位(不分正負);
BigDecimal.ROUND_DOWN 要舍入的小數總是直接砍掉,不進位(不分正負);
BigDecimal.ROUND_CEILING 7.61保留1位,變成7.7,-7.61保留一位,變成-7.6;
BigDecimal.ROUND_FLOOR 7.67保留1位,變成7.6,-7.61保留一位,變成-7.7;
BigDecimal.ROUND_HALF_UP 四捨五入,2.35保留1位,變成2.4
BigDecimal.ROUND_HALF_DOWN 四捨五入,2.35保留1位,變成2.3
後邊兩種的區別就是如果保留的位數的後一位如果正好是5的時候,一個捨棄掉,一個進位。