關于Java小數點位數保留的解決方案

xq1752 8年前發布 | 22K 次閱讀 Java Java開發

第一種方法-使用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測試類

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class Test { public static void main(String[] args) { double d = 1.19; System.out.println(formatDecimal4(d)); }

public static String formatDecimal1(double d) {
    DecimalFormat df = new DecimalFormat("0.00");
    return df.format(d);
}

public static String formatDecimal2(double d) {
    DecimalFormat df = new DecimalFormat("#.##");
    return df.format(d);
}
public static String formatDecimal3(double d){
    return String.format("%.2f",d);
}

public static double formatDecimal4(double d){
    BigDecimal bd=new BigDecimal(d);
    double d1=bd.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue();
    return d1;
}

}</code></pre>

 

來自:http://www.jianshu.com/p/00fff555986b

 

 本文由用戶 xq1752 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!