標籤:
一、簡單的例子
1 public void testNum(){2 System.out.println(Math.round(12.5));3 System.out.println(Math.round(-12.5));4 }5 6 Output: 137 -12
輸出是由 Math.round 的四捨五入規則影響的。
二、Java中的舍入法
1.ROUND_UP:遠離零方向舍入。向絕對值最大的方向舍入,只要捨棄位非0即進位。
2.ROUND_DOWN:趨向零方向舍入。向絕對值最小的方向輸入,所有的位都要捨棄,不存在進位情況。
3.ROUND_CEILING:向正無窮方向舍入。向正最大方向靠攏。若是正數,舍入行為類似於 ROUND_UP,若為負數,舍入行為
類似於 ROUND_DOWN。 Math.round() 方法就是使用的此模式。
4.ROUND_FLOOR:向負無窮方向舍入。向負無窮方向靠攏。若是正數,舍入行為類似於 ROUND_DOWN;若為負數,舍入行為
類似於 ROUND_UP。
5.HALF_UP:最近數字舍入(5進)。這是我們最經典的四捨五入。
6.HALF_DOWN:最近數字舍入(5舍)。在這裡5是要捨棄的。
7.HAIL_EVEN:銀行家舍入法。捨去位的數值小於5時直接捨去,大於5時進位後捨去,等於5時若後面還有其他非0值則進位
後捨去,若5後面是0則根據5前面數位奇偶性判斷,奇數進位,偶數捨去。
銀行家演算法舉例:
1 public static void main(String[] args) {2 BigDecimal d = new BigDecimal(100000); //存款3 BigDecimal r = new BigDecimal(0.001865*3); //利息4 BigDecimal i = d.multiply(r).setScale(2,RoundingMode.HALF_EVEN); //使用銀行家演算法5 6 System.out.println("季利息是:"+i);7 }8 Output:9 季利息是:559.50
三、設定精度
1.使用BigDecimal
1 public void testNumberScale(){2 double d = 123456.7850;3 BigDecimal bigDecimal = new BigDecimal(d);4 double d1 = bigDecimal.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();5 System.out.println(d1);6 }
這裡使用BigDecimal 使用 setScale 設定精度,使用 ROUND_HALF_UP 設定舍入規則。
2.使用 DecimalFormat
1 public void testNumberScale2(){2 double d = 123456.7850;3 DecimalFormat decimalFormat = new DecimalFormat("##.00");4 String d1 = decimalFormat.format(d);5 System.out.println(d1);6 }
3.使用 String.format
1 public void testNumberScale3(){2 double d = 123456.7850;3 String d1 = String.format("%.2f",d);4 System.out.println(d1);5 }
注意 DecimalFormat 的舍入規則與 3 不同
重學Java(2):Java數位處理