天天看點

java 兩位小數 四舍五入_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進)。這是我們最經典的四舍五入。-----備注:都說這裡是四舍五入,程式裡的例子也是如此,但是經過測試,實際上是五舍六入

java 兩位小數 四舍五入_java裡的四舍五入(保留兩位小數,傳回double類型)

double payPercent=123.345;

BigDecimal bg= new BigDecimal(payPercent).setScale(2, RoundingMode.HALF_UP);

System.out.println(bg.doubleValue());

輸出結果是123.34

後來經過查找資料,有人說

java 兩位小數 四舍五入_java裡的四舍五入(保留兩位小數,傳回double類型)

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