Java數(shù)字、貨幣值和百分?jǐn)?shù)等的格式化處理
----------------------------------------
System.out.println(123456.789);
----------------------------------------
將會(huì)在Console看到輸出
----------------------------------------
123456.789
----------------------------------------
那么如何得到“123,456.789”這種格式化的輸出呢?
這里就需要用到j(luò)ava.text.Format這個(gè)類。
不僅是數(shù)字,它還提供了貨幣值和百分?jǐn)?shù)的格式化輸出,例如0.58的百分?jǐn)?shù)輸出形式是58%。
要獲得本地的默認(rèn)格式,可以用下列方法獲得:
NumberFormat.getNumberInstance()
NumberFormat.getCurrencyInstance()
NumberFormat.getOpercentInstance()
而要獲得某個(gè)國(guó)家或地區(qū)的具體格式,可以使用參數(shù)Local.XXX。例如,Local.GERMANY,Local.UK。
范例:
---------------------------------------------------------------
import java.text.NumberFormat;
import java.util.Locale;
public class FormatTest{
??? public static void main(String args[]){?
??????? //不使用格式化輸出數(shù)?
??????????double d = 10000.0/3.0;
??????? System.out.println("無(wú)格式化輸出:" + d);
??????? //使用本地默認(rèn)格式輸出數(shù)
????????? NumberFormat numberFormat = NumberFormat.getNumberInstanc();
??????? //numberFormat.setMaximumFractionDigits(4);?
????????//numberFormat.setMinimumIntegerDigits(6);
??????? String numberString = numberFormat.format(d);
??????? System.out.println("本地默認(rèn)格式輸出數(shù):" + numberString);
?????? //使用本地默認(rèn)格式輸出貨幣值
???????? NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
?????? System.out.println("本地默認(rèn)格式輸出貨幣值:" + currencyFormat.format(d));
?????? //使用本地默認(rèn)格式輸出百分?jǐn)?shù)
???????? NumberFormat percentFormat = NumberFormat.getPercentInstance();
?????? System.out.println("本地默認(rèn)格式輸出百分?jǐn)?shù):" + percentFormat.format(d));?
??????//在不同的國(guó)家各地區(qū)數(shù)字表示的格式也有區(qū)別。例如德國(guó)
????????? //使用德國(guó)的格式化輸出數(shù)
??????????? NumberFormat numberFormatG = NumberFormat.getNumberInstance(Local.GERMANY);
????????? System.out.println("德國(guó)數(shù)字輸出形式:" + numberFormatG.format(d));
???????? //使用德國(guó)貨幣輸出形式
?????????? NumberFormat currencyFormatG = NumberFormat.getCurrencyInstance(Local.GERMANY);
???????? System.out.println("德國(guó)貨幣輸出形式:" + currencyFormatG.format(d));
???????? //使用美國(guó)貨幣輸出形式
?????????? NumberFormat currencyFormatA = NumberFormat.getCurrencyInstance(Local.US);
???????? System.out.println("美國(guó)貨幣輸出形式:" + currencyFormatG.format(d));?
???????
???????? //使用德國(guó)百分?jǐn)?shù)輸出形式?
???????????NumberFormat percentFormatG = NumberFormat.getPercentInstance(Local.GERMANY);
???????? System.out.println("德國(guó)百分?jǐn)?shù)輸出形式:" + percentFormatG .format(d));
???????? System.exit(0);
???? }
?}
?
---------------------------------------------------------------------------------
程序輸出
---------------------------------------
<!--[if !vml]--><!--[endif]-->
---------------------------------------
由于歐元符號(hào)無(wú)法在此Console輸出,所以顯示?
可以指定顯示的最多(或最少)整數(shù)位和小數(shù)位。如
---------------------------------------
double d = 10000.0/3.0;
NumberFormat numberFormat = NumberFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(4);
numberFormat.setMinimumIntegerDigits(6);
String numberString = numberFormat.format(d);
System.out.println(numberString);
?
---------------------------------------
輸出:
---------------------------------------
003,333.3333
---------------------------------------
整數(shù)位不夠的補(bǔ)零,小數(shù)截去部分四舍五入。
也可以利用NumberFormat的一個(gè)子類DecimalFormat來(lái)指定輸出格式。
---------------------------------------
DecimalFormat decimalFormat = new DecimalFormat("######.0000");
String s = decimalFormat.format(d);
---------------------------------------
和前面一樣,顯示6個(gè)整數(shù)位和4個(gè)小數(shù)位。
下面對(duì)格式化的數(shù)字進(jìn)行解析。
---------------------------------------
import java.util.Locale;
import java.text.NumberFormat;
import java.text.ParseException;
public class ParseFormat{
??? public static void main(String args[]){
??????? //本地格式的解析
????????? NumberFormat numberFormat1 = NumberFormat.getNumberInstance();?
???????Number numb1 = null;
?????? try
????? {
?????????? numb1 = numberFormat1.parse("33,333.33");
?????? }
?????? catch(ParseException e1)
????? {
?????????? System.err.println(e1);
????? }
????? System.out.println(number1);
????? //以德國(guó)格式解析?
????????NumberFormat numberFormat2 = NumberFormat.getNumberInstance(Locale.GERMANY);
??????? Number numb2 = null;?
?
??????? try
?????? {
??????????? numb2 = numberFormat2.parse("33,333.33");
?????? }
?????? catch(ParseException e2)
?????? {
??????????? System.err.println(e2);
?????? }
?????? System.out.println(number2);
?????? System.exit(0);
??? }
}
?
---------------------------------
程序輸出:
---------------------------------
33333.33 33.333
?
--------------------------------
?
同樣一種格式33,333.33,有人將之理解為33333.33,也有人認(rèn)為它是33.333,軟件國(guó)際化的重要性可見(jiàn)一斑。
posted on 2007-12-19 00:15 藍(lán)色幽默 閱讀(467) 評(píng)論(0) 編輯 收藏 所屬分類: Java