熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

格式化輸出數字

2013-11-15 11:47:39  來源: JSP教程 

  格式化輸出數字
  有時我們需要控制輸出的數字的格式如何使用java的類庫做到這個呢?
  
  也許你不關心格式但是你需要關心你的程序可以在全世界通用像下面的這樣一個簡單的語句是依賴地區的
  
   Systemoutprintln();
  
  在美國 是小數點但在其它地方就不一定了如何處理這個呢?
  
  javatext 包中的一些包可以處理這類問題下面的簡單范例使用那些類解決上面提出的問題
  
   import javatextNumberformat;
  
   import javautilLocale;
  
   public class Decimalformat {
  
   public static void main(String args[]) {
  
   // 得到本地的缺省格式
  
   Numberformat nf = NumberformatgetInstance();
  
   Systemoutprintln(nfformat());
  
   // 得到德國的格式
  
   Numberformat nf =
  
   NumberformatgetInstance(LocaleGERMAN);
  
   Systemoutprintln(nfformat());
  
   }
  
   }
  
  如果你在美國運行程序後輸出
  
  
  
  
  
  換句話說在不同的地方使用不同的習慣表示數字
  
  NumberformatgetInstance()方法返回Numberformat的一個實例(實際上是Numberformat具體的一個子類例如Decimalformat) 這適合根據本地設置格式化一個數字你也可以使用非缺省的地區設置例如德國然後格式化方法根據特定的地區規則格式化數字這個程序也可以使用一個簡單的形式
  
   NumberformatgetInstance()format()
  
  但是保存一個格式然後重用更加有效國際化是格式化數字時的一個大問題
  
  另一個是對格式的有效控制例如指定小數部分的位數下面是解決這個問題的一個簡單例子
  
   import javatextDecimalformat;
  
   import javautilLocale;
  
   public class Decimalformat {
  
   public static void main(String args[]) {
  
   // 得到本地的缺省格式
  
   Decimalformat df = new Decimalformat(####);
  
   Systemoutprintln(dfformat());
  
   // 得到德國的格式
  
   LocalesetDefault(LocaleGERMAN);
  
   Decimalformat df = new Decimalformat(####);
  
   Systemoutprintln(dfformat());
  
   }
  
   }
  
  在這個例子中設置了數字的格式使用像####的符號這個模式意味著在小數點前有四個數字如果不夠就空著小數點後有三位數字不足用補齊程序的輸出
  
  
  
  
  
  相似的也可以控制指數形式的格式例如
  
   import javatextDecimalformat;
  
   public class Decimalformat {
  
   public static void main(String args[]) {
  
   Decimalformat df = new Decimalformat(E);
  
   Systemoutprintln(dfformat());
  
   }
  
   }
  
  輸出
  
   E
  
  對於百分數
  
   import javatextNumberformat;
  
   public class Decimalformat {
  
   public static void main(String args[]) {
  
   Numberformat nf = NumberformatgetPercentInstance();
  
   Systemoutprintln(nfformat());
  
   }
  
   }
  
  輸出
  
   %
  
  至此你已經看到了格式化數字的幾個不同的技術另一方面如何讀取並解析包含格式化的數字的字符串?解析支持包含在Numberformat中例如
  
   import javautilLocale;
  
   import javatextNumberformat;
  
   import javatextParseException;
  
   public class Decimalformat {
  
   public static void main(String args[]) {
  
   // 本地格式
  
   Numberformat nf = NumberformatgetInstance();
  
   Object obj = null;
  
   // 基於格式的解析
  
   try {
  
   obj = nfparse();
  
   }
  
   catch (ParseException e) {
  
   Systemerrprintln(e);
  
   }
  
   Systemoutprintln(obj);
  
   // 德國格式
  
   Numberformat nf =
  
   NumberformatgetInstance(LocaleGERMAN);
  
   Object obj = null;
  
   // 基於格式的解析
  
   try {
  
   obj = nfparse();
  
   }
  
   catch (ParseException e) {
  
   Systemerrprintln(e);
  
   }
  
   Systemoutprintln(obj);
  
   }
  
   }
  
  這個例子分兩部分都是解析一個字符串第一部分使用本地格式解析第二部分使用德國格式解析當程序在美國運行結果是
  
  
  
  
  
  換句話說在美國被認為是一個巨大的整數而在德國被認為是一個小數
  
  還有格式化討論的最後一個問題在上面的例子中 Decimalformat 和 Numberformat 都被使用了Decimalformat 常用於獲得很好的格式控制而Numberformat 常用於指定不同於本地的地區如何結合兩個類呢?
  
  答案圍繞著這樣的事實Decimalformat是Numberformat的一個子類其實例被指定為特定的地區因此你可以使用NumberformatgetInstance 指定一個地區然後將結構強制轉換為一個Decimalformat對象文檔中提到這個技術可以在大多情況下適用但是你需要用try/catch 塊包圍強制轉換以防轉換不能正常工作 (大概在非常不明顯得情況下使用一個奇異的地區)下面是一個這樣的例子
  
   import javatextDecimalformat;
  
   import javatextNumberformat;
  
   import javautilLocale;
  
   public class Decimalformat {
  
   public static void main(String args[]) {
  
   Decimalformat df = null;
  
   // 得到一個Numberformat 對象並
  
   // 強制轉換為一個 Decimalformat 對象
  
   try {
  
   df = (Decimalformat)
  
   NumberformatgetInstance(LocaleGERMAN);
  
   }
  
   catch (ClassCastException e) {
  
   Systemerrprintln(e);
  
   }
  
   // 設置格式模式
  
   dfapplyPattern(####);
  
   // format a number
  
   Systemoutprintln(dfformat());
  
   }
  
   }
  
  
  getInstance() 方法獲得格式然後調用applyPattern()方法設置格式模式輸出
  
  
  
  如果你不關心國際化可以直接使用Decimalformat
  

From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19635.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.