當我們面對需要對數字進行精細的格式化輸出時,DecimalFormat 是一個非常重要的工具類。在本文中,我們將對 DecimalFormat 進行全方位的探討,從各個方面闡述它的用法。
一、模式
在使用 DecimalFormat 進行數字格式化時,我們需要用到“模式”,模式是一個字符串,它定義了輸出數字時的各種規則和格式,這些規則和格式可以包括數字位數、小數位數、分組分隔符、貨幣符號等等。一般來說,模式由一個或多個“數字格式字符”和特殊字符組成,其中數字格式字符指定輸出數字的規則。
數字格式字符包括:
- 0:表示必須輸出的數字
- #:表示可選的數字,如果不存在則不輸出
- .:小數點
- ,:分組分隔符
- E:科學計數法
下面是一些模式的示例:
模式 輸入值 輸出值 0.00 12.3456 12.35 #,###.00 123456.789 123,456.79 $#,###.00 123456.789 $123,456.79 0.#####E0 123456789 1.23457E8
可以看到,我們可以根據需要自由選擇使用哪些數字格式字符和特殊字符來構建模式,從而達到所需的格式輸出。
二、基本用法
下面我們來看一下基本的使用方式。首先,我們需要創建一個 DecimalFormat 對象:
DecimalFormat df = new DecimalFormat();
如果需要使用自定義的模式,我們可以在創建對象時傳入模式字符串:
DecimalFormat df = new DecimalFormat("0.00");
然後,我們使用 format 方法對數字進行格式化:
double num = 1234.56; String result = df.format(num); System.out.println(result); // 輸出:"1234.56"(如果使用了自定義模式則輸出符合模式的字符串)
在使用 format 方法輸出結果時,DecimalFormat 會根據模式進行處理,生成符合規則的字符串。需要注意的是,輸出結果是一個字符串,例如在控制台輸出時,需要使用 println 或 print 方法進行輸出。
三、數字格式化
數字格式化是 DecimalFormat 最主要的用途之一。格式化數字的方式有很多種,下面我們來逐一介紹。
1. 固定數字位數
使用“0”字符可以指定一個數字位必須輸出,如果不存在則輸出“0”,例如:
DecimalFormat df = new DecimalFormat("00000.000"); double num1 = 12.3456; double num2 = 123456.789; String result1 = df.format(num1); String result2 = df.format(num2); System.out.println(result1); // 輸出:"00012.346" System.out.println(result2); // 輸出:"123456.789"
可以看到,使用了“0”字符後,位數不足時會在前面補上“0”,但是位數超出時並不會進行舍入。
2. 計算數字位數
使用“#”字符可以指定一個數字位可以存在,也可以不存在,例如:
DecimalFormat df = new DecimalFormat("#.##"); double num1 = 1.0; double num2 = 1.23; double num3 = 1.234; String result1 = df.format(num1); String result2 = df.format(num2); String result3 = df.format(num3); System.out.println(result1); // 輸出:"1" System.out.println(result2); // 輸出:"1.23" System.out.println(result3); // 輸出:"1.23"
可以看到,使用了“#”字符後,如果數字位不存在,不會進行輸出。而且在四捨五入時,也會按照“#”字符所在位置來決定舍入位置。例如上面的示例中,在模式中只有兩位小數,因此 num3 中的“4”被捨去了。
3. 指定小數位數
使用“.”字符可以指定小數位數,例如:
DecimalFormat df = new DecimalFormat("0.00"); double num1 = 1.2; double num2 = 2; String result1 = df.format(num1); String result2 = df.format(num2); System.out.println(result1); // 輸出:"1.20" System.out.println(result2); // 輸出:"2.00"
4. 分組分隔符
分組分隔符可以讓輸出結果更容易讀懂。默認的分組分隔符是逗號(“,”),但是可以使用 setGroupingSeparator 方法來指定分隔符:
DecimalFormat df = new DecimalFormat("#,###.00"); double num = 123456.789; df.setGroupingSize(3); df.setGroupingUsed(true); String result = df.format(num); System.out.println(result); // 輸出:"123,456.79"
在上面的示例中,我們使用 setGroupingSize 方法來指定每三個數字為一組,使用 setGroupingUsed 方法來開啟分組分隔符。同時在模式中使用“#,###.00”指定了輸出結果的格式。
四、貨幣格式化
DecimalFormat 也可以用來對貨幣進行格式化,以便輸出符合規範的貨幣字符串。
DecimalFormat df = new DecimalFormat("¤#,###.00"); double num = 123456.789; df.setCurrency(Currency.getInstance(Locale.US)); String result = df.format(num); System.out.println(result); // 輸出:"$123,456.79"
在上面的示例中,我們使用“¤”字符來指定貨幣符號,並使用 setCurrency 方法來指定使用的貨幣類型。需要注意的是,某些國家或地區的貨幣符號不是單個字符,而是多個字符或標誌,此時可以在模式字符串中直接包含該符號,也可以使用 setPositivePrefix、setPositiveSuffix 等方法來對符號進行指定。
五、指數格式化
DecimalFormat 也可以用來進行指數格式化,例如:
DecimalFormat df = new DecimalFormat("0.###E0"); double num = 123456789; String result = df.format(num); System.out.println(result); // 輸出:"1.235E8"
在上面的示例中,我們使用“E”字符來指定使用科學計數法,並使用“0.###”來指定保留小數點後三位。
六、總結
本文詳細介紹了 DecimalFormat 的用法。首先我們介紹了模式,然後介紹了基本的使用方法。其次我們還介紹了數字格式化、貨幣格式化、指數格式化等方面的用法。在使用 DecimalFormat 進行數字格式化時,我們需要注意模式的設置,合理使用數字格式字符和特殊字符,從而達到預期的效果。
原創文章,作者:VAIB,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/138463.html