第一種方法
使用DecimalFormat類
舉個例子,假如我們需要保留兩位小數,我們可以這樣寫
DecimalFormat df = new DecimalFormat("0.00");
測試如下:
double d = 0.200; DecimalFormat df = new DecimalFormat("0.00"); System.out.println(df.format(d));
輸出結果為:
0.20
若double d=0.000;輸出結果為0.00;
若double d=0;輸出結果為0.00;
若double d=41.2345;輸出結果為41.23;
經測試,不管double d的值為多少,最後結果都是正常的兩位小數。
同理若是保留一位小數DecimalFormat df = new DecimalFormat("0.0");其他以此類推
若是這種寫法DecimalFormat df = new DecimalFormat("0.00"),不管傳入的任何值,均保留兩位小數
還有一種寫法是這樣:
double d = 41.123; DecimalFormat df = new DecimalFormat("#.##"); System.out.println(df.format(d));
輸出結果為:
41.12
若double d=2.00,輸出結果為2;
若double d=41.001,輸出結果為41;
若double d=41.010,輸出結果為41.01;
若double d=0,輸出結果為0;
若double d=0.200,輸出結果為0.2;
總結:若是這種寫法DecimalFormat df = new DecimalFormat("#.##"),則保留小數點後面不為0的兩位小數,這種寫法不能保證保留2為小數,但能保證最後一位數不為0;
第二種方法
測試:
double d = 0.6544; String s=String.format("%.2f",d); System.out.println(s);
輸出結果為:
0.65
若double d=0.6566,輸出結果為0.66;
若double d=0,輸出結果為0.00;
其中String s=String.format("%.2f",d)表示小數點後任意兩位小數,其中2為表示兩位小數,若需要三位小數,把2改為3即可,其他同理。
總結:這種方法不管傳入的值是多少,均保留兩位小數,並且符合四捨五入的規則。
第三種方法:
使用BigDecimal類
測試:
double d = 1.000; BigDecimal bd=new BigDecimal(d); double d1=bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); System.out.println(d1);
輸入結果:1.0
若double d=0,輸出結果為0.0;
若double d=1.999,輸出結果為2.0;
若double d=1.89,輸出結果為1.89;
總結:使用這種寫法若小數點後均為零,則保留一位小數,並且有四捨五入的規則。
源碼
以下為Java測試類
原文:www.jianshu.com/p/00fff555986b