Java數字格式類 NumberFormat | DecimalFormat
阿新 • • 發佈:2020-12-31
文章目錄
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));
}
}
測試結果:
應用場景後續待更新。。。