1. 程式人生 > >Java中格式化輸出數字

Java中格式化輸出數字

今天用到了,在網上查到這篇文章不錯,呵呵!記錄下。

在實際工作中,常常需要設定數字的輸出格式,如以百分比的形式輸出,或者設定小數位數等,現稍微總結如下。
主要使用的類:java.text.DecimalFormat
1。例項化物件,可以用如下兩種方法:
      DecimalFormat df=(DecimalFormat)NumberFormat.getInstance();
      DecimalFormat df1=(DecimalFormat) DecimalFormat.getInstance();
     因為DecimalFormat繼承自NumberFormat。
2。設定小數位數
系統預設小數位數為3,如:
    DecimalFormat df=(DecimalFormat)NumberFormat.getInstance();
    System.out.println(df.format(12.3456789));
輸出:12.346
現在可以通過如下方法把小數為設為兩位:
  df.setMaximumFractionDigits(2);
    System.out.println(df.format(12.3456789));
則輸出為:12.35
3。將數字轉化為百分比輸出,有如下兩種方法:
(1)
  df.applyPattern("##.##%");
    System.out.println(df.format(12.3456789));
    System.out.println(df.format(1));
    System.out.println(df.format(0.015));
輸出分別為:1234.57%    100%      1.5%
(2)
    df.setMaximumFractionDigits(2);
    System.out.println(df.format(12.3456789*100)+"%");
    System.out.println(df.format(1*100)+"%");
    System.out.println(df.format(0.015*100)+"%");
輸出分別為:
1,234.57%     100%     1.5%
4。設定分組大小
     DecimalFormat df1=(DecimalFormat) DecimalFormat.getInstance();
df1.setGroupingSize(2);
    System.out.println(df1.format(123456789));
輸出:1,23,45,67,89
還可以通過df1.setGroupingUsed(false);來禁用分組設定,如:
     DecimalFormat df1=(DecimalFormat) DecimalFormat.getInstance();
    df1.setGroupingSize(2);
df1.setGroupingUsed(false);
    System.out.println(df1.format(123456789));
輸出:123456789
5。設定小數為必須為2位
    DecimalFormat df2=(DecimalFormat) DecimalFormat.getInstance();
  df2.applyPattern("0.00");
    System.out.println(df2.format(1.2));
輸出:1.20

java.text.DecimalFormat學習筆記


例子:
import java.text.*;

public class Untitled1    {
   public static void main(String[] args) {

     //---------------------------------------------
     //定義一個數字格式化物件,格式化模板為".##",即保留2位小數.
     DecimalFormat a = new DecimalFormat(".##");
     String s= a.format(333.335);
     System.err.println(s);
     //說明:如果小數點後面不夠2位小數,不會補零.參見Rounding小節
     //---------------------------------------------

     //-----------------------------------------------
     //可以在執行時刻用函式applyPattern(String)修改格式模板
     //保留2位小數,如果小數點後面不夠2位小數會補零
     a.applyPattern(".00");
     s = a.format(333.3);
     System.err.println(s);
     //------------------------------------------------

     //------------------------------------------------
     //新增千分號
     a.applyPattern(".##\u2030");
     s = a.format(0.78934);
     System.err.println(s);//新增千位符後,小數會進三位並加上千位符
     //------------------------------------------------

     //------------------------------------------------
     //新增百分號
     a.applyPattern("#.##%");
     s = a.format(0.78645);
     System.err.println(s);
     //------------------------------------------------

    //------------------------------------------------
     //新增前、後修飾字符串,記得要用單引號括起來
     a.applyPattern("'這是我的錢$',###.###'美圓'");
     s = a.format(33333443.3333);
     System.err.println(s);
     //------------------------------------------------

      //------------------------------------------------
     //新增貨幣表示符號(不同的國家,新增的符號不一樣
     a.applyPattern("\u00A4");
     s = a.format(34);
     System.err.println(s);
     //------------------------------------------------

     //-----------------------------------------------
     //定義正負數模板,記得要用分號隔開
      a.applyPattern("0.0;'@'-#.0");
      s = a.format(33);
      System.err.println(s);
      s = a.format(-33);
      System.err.println(s);
      //-----------------------------------------------
   
     //綜合運用,正負數的不同前後綴
     String pattern="'my moneny'###,###.##'RMB';'ur money'###,###.##'US'";
     a.applyPattern(pattern);
     System.out.println(a.format(1223233.456));
   }
}

總結:
要生成一個DecimalFormat物件,一般只要通過NumberFormat類工廠的getInstance()來取得一個NumberFormat物件再將其轉換成DecimalFormat物件,然後通過DecimalForat物件的applyPattern()來動態改變資料的現示格式模板,通過format()方法取得格式化後的數字。同時,DecimalFormat提供了許多的方法來返回格式化後的數字的某一部份,這些方法如:getNegativeSuffix()。這個類的難點主要是在模板的書寫及理解上。其實主要的就是針對一個數字的正負形式來設定不同的格式顯示。這裡要特別注意的是使用在模板上的特殊字元代表有特殊的意義,如下表所示:
Symbol    Description
0    a digit
#    a digit, zero shows as absent
.    placeholder for decimal separator
,    placeholder for grouping separator
E   separates mantissa and exponent for exponential formats
;    separates formats
-    default negative prefix
%    multiply by 100 and show as percentage
?    multiply by 1000 and show as per mille
¤    currency sign; replaced by currency symbol; if doubled,replaced by international currency symbol; if present in a pattern, themonetary decimal separator is used instead of the decimal separator 
X    any other characters can be used in the prefix or suffix
'    used to quote special characters in a prefix or suffix

例如:如果模板中含有#,意思是指這個#號可代表一個或多個數字如果該位的數字是零的話則省略該位。另:注意“#,##0.0#;(#)”這個模板的意思是指數字的負數形式跟正數的一樣。