java里的四舍五入(保留兩位小數,返回double類型)


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM