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