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進)。這是我們最經典的四舍五入。-----備注:都說這裡是四舍五入,程式裡的例子也是如此,但是經過測試,實際上是五舍六入
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iNhJTMwkTOkJDZ1MWMhNDN2YWNjhzYyYGZkFTM1kTOy8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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