1、最簡單的操作,驗證之后是准確的四舍五入
double payPercent=123.345; System.out.println((double)Math.round(payPercent*100)/100);
輸出結果:123.35
2、使用BigDecimal
1、 ROUND_UP:遠離零方向舍入。向絕對值最大的方向舍入,只要舍棄位非0即進位。(備注:就是只要第三位不是0,都往前進1。如1.121,輸出會是1.13)
double payPercent=123.343; BigDecimal bg = new BigDecimal(payPercent).setScale(2, RoundingMode.UP); System.out.println(bg.doubleValue());
輸出結果123.35
2、 ROUND_DOWN:趨向零方向舍入。向絕對值最小的方向輸入,所有的位都要舍棄,不存在進位情況。
double payPercent=123.349; BigDecimal bg = new BigDecimal(payPercent).setScale(2, RoundingMode.DOWN); System.out.println(bg.doubleValue());
輸出結果123.34
3、 ROUND_CEILING:向正無窮方向舍入。向正最大方向靠攏。若是正數,舍入行為類似於ROUND_UP,若為負數,舍入行為類似於ROUND_DOWN。Math.round()方法就是使用的此模式。(沒測試)
4、 ROUND_FLOOR:向負無窮方向舍入。向負無窮方向靠攏。若是正數,舍入行為類似於ROUND_DOWN;若為負數,舍入行為類似於ROUND_UP。(沒測試)
5、 HALF_UP:最近數字舍入(5進)。這是我們最經典的四舍五入。-----備注:都說這里是四舍五入,程序里的例子也是如此,但是經過測試,實際上是五舍六入
double payPercent=123.345; BigDecimal bg = new BigDecimal(payPercent).setScale(2, RoundingMode.HALF_UP); System.out.println(bg.doubleValue());
輸出結果是123.34
后來經過查找資料,有人說
double payPercent=123.345; BigDecimal bg = new BigDecimal(String.valueOf(payPercent)).setScale(2, RoundingMode.HALF_UP); System.out.println(bg.doubleValue());
輸出結果是123.35-----正確的四舍五入處理
6、 HALF_DOWN:最近數字舍入(5舍)。在這里5是要舍棄的。---即使按照上一步修改設置,也是會在5的時候舍去
7、 HAIL_EVEN:銀行家舍入法。--(測試了下,好像5也是舍去的,具體不太清楚)
3、其他操作
double payPercent=123.345; NumberFormat nf = NumberFormat.getNumberInstance(); // 保留兩位小數 nf.setMaximumFractionDigits(2); nf.setRoundingMode(RoundingMode.HALF_UP); System.out.println(nf.format(payPercent)); DecimalFormat df = new DecimalFormat("#.00"); System.out.println(df.format(payPercent));
輸出結果:123.34