首頁 > 軟體

Java數位格式類(NumberFormat類和DecimalFormat類)用法詳解

2022-07-06 10:01:46

Java數位格式類

以下兩個類可用於格式化和解析數位:

  • java.text.NumberFormat
  • java.text.DecimalFormat

NumberFormat類

1.基本介紹

NumberFormat 類可以將一個數值格式化為符合某個國家地區習慣的數值字串,也可以將符合某個國家地區習慣的數值字串解析為對應的數值。

Java8API檔案 https://docs.oracle.com/javase/8/docs/api/java/text/NumberFormat.html

方法:

format 方法:將一個數值格式化為符合某個國家地區習慣的數值字串
parse 方法:將符合某個國家地區習慣的數值字串解析為對應的數值
    
範例化NumberFormat類(在範例化時,可以使用 Locale 物件作為引數,也可以不使用):
getXXXInstance() 方法:返回NumberFormat範例物件
getInstance():以預設語言環境返回NumberFormat範例物件
    
getNumberInstance(Locale locale):以引數Locale 物件所標識的本地資訊來獲得具有多種用途的NumberFormat範例物件(沒什麼實際作用)
getIntegerInstance(Locale locale):以引數locale物件所標識的本地資訊來獲得處理整數的NumberFormat範例物件(沒什麼實際作用)
getCurrencyInstance(Locale locale):以引數locale物件所標識的本地資訊來獲得處理貨幣的NumberFormat範例物件
getPercentInstance(Locale locale):以引數locale物件所標識的本地資訊來獲得處理百分比數值的NumberFormat範例物件

2.使用案例

NumberFormatDemo

public class NumberFormatDemo {
	
	public static void main(String[] args) throws ParseException {
		int price = 18;
		NumberFormat nf = NumberFormat.getCurrencyInstance(Locale.CHINA);
		System.out.println(nf.format(price));//輸出:¥18.00
		nf = NumberFormat.getCurrencyInstance(Locale.US);
		System.out.println(nf.format(price));//輸出:$18.00
		nf = NumberFormat.getCurrencyInstance(Locale.GERMAN);
		System.out.println(nf.format(price));//輸出:¤ 18,00
		
		String str = "¤ 18,00";
		Number n = nf.parse(str);
		System.out.println(n.doubleValue());//輸出 18
		
		double d = 0.5;
		nf = NumberFormat.getPercentInstance(Locale.CHINA);
		System.out.println(nf.format(d));//50%
	}
}

測試結果:

3.應用場景

1.Java使用 int 資料計算百分比

public class NumberFormatDemo {
	
	public static void main(String[] args) throws ParseException {
  		int n1 = 0;
        int n2 = 0;
        //建立一個數值格式化物件
        NumberFormat nf = NumberFormat.getInstance();
        //設定精確到小數點後2位
        nf.setMaximumFractionDigits(2);
        String res1;
        if(n2 == 0){
            //除數不能為0
            res1 = "0";
        }else{
            res1 = nf.format((float) n1 / (float) n2 * 100);
        }
        System.out.println("百分比為:" + res1 + "%");
	}
}

DecimalFormat類

1.基本介紹

DecimalFormat 類是NumberFormat 十進位制數位格式的具體子類。旨在解析格式化任何語言環境中的數位,包括支援西方、阿拉伯語和印度語數位。

支援不同型別的數位,包括整數(123)、定點數(123.4)、科學計數法(1.23E4),百分比(12%)和貨幣金額(123美元)。

對於數值的小數部分,預設顯示3位小數,在去掉超出小數點3位以後的部分時,會將數值四捨五入為最接近的數值格式化輸出。

特殊模式字元:

*符號**地點**在地化?**含義*
0數位,被格式化數值不夠的位數補零,若夠則不變
#數位,被格式化數值不夠的位數忽略,若夠則不變
.小數分隔符或貨幣小數分隔符
-減號,預設負數字首
,分組分隔符
E用科學記數法分隔尾數和指數。 不需要在字首或字尾中參照。
;子模式邊界將正面和負面的子圖案分開
%字首或字尾乘以100並顯示為百分比
u2030字首或字尾乘以1000並顯示為千分數,顯示出來為‰
¤(u00A4)字首或字尾沒有貨幣符號,由貨幣符號取代。如果加倍,則用國際貨幣符號代替。如果存在於模式中,則使用貨幣小數分隔符而不是小數分隔符。
字首或字尾沒有用於參照字首或字尾中的特殊字元,例如,"’#’#“格式為123到 “#123”。要建立單引號本身,請連續使用兩個:”# o’'clock"。

構造方法:

DecimalFormat()  使用預設語言環境的預設模式和符號建立物件。其中隱含設定了三個數一組,若呼叫該方法如123456.789->123,456.789
DecimalFormat(String pattern) 使用給定模式和預設語言環境的符號建立物件。
DecimalFormat(String pattern, DecimalFormatSymbols symbols) 使用給定的模式和符號建立物件
//pattern - 非在地化的模式字串
//symbols - 要使用的符號集

注:第三個構造方法一般不怎麼用到,若需要可參考 DecimalFormatSymbols類

Java8API檔案 https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormatSymbols.html

方法:

format()和parse()的呼叫和DateFormat類的呼叫方法相同。

format(Number->String)parse(String->Number)

其中,常用的成員方法有:

(1)applyPattern()方法,將給定的模式應用於Format物件

(2)getPositivePrefix()方法,獲取正字首
    getPositiveSuffix()方法,獲取正字尾
    setPositivePrefix(String newValue)方法,設定正字首     
    setPositiveSuffix(String newValue)方法,設定正字尾

(3)getNegativePrefix()方法,獲取否字首         
    getNegativeSuffix()方法,獲取否字尾
	setNegativePrefix(String newValue)方法,設定否字首      
    setNegativeSuffix(String newValue)方法,設定否字尾

(4)getCurrency()方法,獲取格式化貨幣值時此十進位制格式使用的貨幣。

(5)getGroupingSize()方法,返回分組大小。分組大小是數位的整數部分中分組分隔符之間的位數。例如,在數位「123,456.78」中,分組大小為3。

更多詳細方法參見:java8API檔案 https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html

基本語法:

1、字首和字尾:數位前後的符號,除uFFFE、uFFFF和特殊字元以外的所有Unicode字元。

2、如果使用具有多個分組字元的模式,則最後一個分隔符和整數結尾之間的間隔才是使用的分組大小。如"#,##,###,####"的分組為4。

3、整數部分,#號放在0的左邊
4、小數部分,#號放在0的右邊

2.使用案例

public class DecimalFormatDemo {
	
	public static void main(String[] args) throws ParseException {
  		double d=156.22359646;
        System.out.println(new DecimalFormat("0").format(d));//被格式化的數值位數夠,則取所有整數
        System.out.println(new DecimalFormat("#").format(d));//被格式化的數值位數夠,則取所有整數
        System.out.println(new DecimalFormat("00000.###").format(d));//被格式化的數值位數不夠,則整數位不夠的補零
        System.out.println(new DecimalFormat("#.######u2030").format(d));//以千分比方式計數並且保留6位小數
        System.out.println(new DecimalFormat("#.##%").format(d));//以百分比方式計數並且保留2位小數
        long c=4673568;
        System.out.println(new DecimalFormat("#.#####E00").format(c));//顯示為科學計演演算法,並保留5為小數且被格式化的數值位數不夠,不夠的補零
        System.out.println(new DecimalFormat("00.####E0").format(c));//顯示為科學計數法,並保留2位整數,4位元小數
        System.out.println(new DecimalFormat("####,###").format(c));//毎三位用逗號分隔
        System.out.println(new DecimalFormat("資料分隔後為,##大小").format(c));
	}
}

測試結果:

總結

到此這篇關於Java數位格式類(NumberFormat類和DecimalFormat類)用法的文章就介紹到這了,更多相關Java數位格式類用法內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com