以下兩個類可用于格式化和解析數(shù)字:
NumberFormat
類可以格式化一個數(shù)字特定地區(qū)的預(yù)定義格式。
DecimalFormat
類可以格式化數(shù)字以特定區(qū)域設(shè)置的自定義格式。
NumberFormat類的 getXXXInstance()
方法返回格式化程序?qū)ο蟮膶?shí)例。
XXX可以由數(shù)字,貨幣,整數(shù)或百分比替換,或只是getInstance()。這些方法都是重載的。
如果你調(diào)用它們沒有參數(shù),它們返回一個格式化對象默認(rèn)語言環(huán)境。
使用number參數(shù)調(diào)用format()方法以將格式化的數(shù)字作為字符串。
import java.text.NumberFormat; public class Main { public static void main(String[] args) { NumberFormat formatter; // Get number formatter for default locale formatter = NumberFormat.getInstance(); System.out.println(formatter.format(12312.123123)); } }
上面的代碼生成以下結(jié)果。
下面的代碼說明了如何以默認(rèn)格式為當(dāng)前語言環(huán)境,法語語言環(huán)境和德語語言環(huán)境格式化數(shù)字。
import java.text.NumberFormat; import java.util.Locale; public class Main { public static void main(String[] args) { double value = 123456789.9876543; // Default locale printFormatted(Locale.getDefault(), value); // Indian locale Locale indianLocale = new Locale("en", "IN"); printFormatted(indianLocale, value); } public static void printFormatted(Locale locale, double value) { // Get number and currency formatter NumberFormat nf = NumberFormat.getInstance(locale); NumberFormat cf = NumberFormat.getCurrencyInstance(locale); System.out.println("Format value: " + value + " for locale: " + locale); System.out.println("Number: " + nf.format(value)); System.out.println("Currency: " + cf.format(value)); } }
上面的代碼生成以下結(jié)果。
要執(zhí)行更高級的格式化,我們可以使用DecimalFormat類。
DecimalFormat類允許我們提供我們自己的格式模式。 的下表顯示模式及其用法。
符號 | 位置 | 含義 |
---|---|---|
0 | Number | 代表數(shù)字 |
# | Number | 數(shù)字,零顯示為不存在 |
. | Number | 小數(shù)分隔符或貨幣小數(shù)分隔符 |
- | Number | 減號 |
, | Number | 分組分隔符 |
E | Number | 以科學(xué)記數(shù)法分隔尾數(shù)和指數(shù)。 |
; | 子模式邊界 | 分隔正和負(fù)子模式 |
% | 字首或字尾 | 乘以100并以百分比顯示 |
\u2030 | 字首或字尾 | 乘以1000,并顯示為每毫米值 |
一旦我們創(chuàng)建了DecimalFormat類的對象,就可以改變格式模式使用其 applyPattern()
方法。
import java.text.DecimalFormat; public class Main { private static DecimalFormat formatter = new DecimalFormat(); public static void main(String[] args) { formatNumber("##.##", 12.345); formatNumber("##.##", 12.345); formatNumber("0000.0000", 12.345); formatNumber("#.##", -12.345); // Positive and negative number format formatNumber("#.##;(#.##)", -12.735); } public static void formatNumber(String pattern, double value) { // Apply the pattern formatter.applyPattern ( pattern ); String formattedNumber = formatter.format(value); System.out.println("Number:" + value + ", Pattern:" + pattern + ", Formatted Number:" + formattedNumber); } }
上面的代碼生成以下結(jié)果。
我們還可以使用 parse()
方法將字符串解析為數(shù)字。 parse()
方法返回 java.lang.Number
類的對象。
我們可以使用 java.lang.Number
類中的xxxValue()方法來獲取原始值,其中xxx可以是byte,double,float,int,long和short。
import java.text.DecimalFormat; import java.text.ParsePosition; public class Main { private static DecimalFormat formatter = new DecimalFormat(); public static void main(String[] args) { // Parse a string to decimal number String str = "qq1,234.567"; String pattern = "#,###.###"; formatter.applyPattern(pattern); // Create a ParsePosition object to specify the first digit of // number in the string. It is 1 in "qq1,234.567" // with the index 2. ParsePosition pp = new ParsePosition(2); Number numberObject = formatter.parse(str, pp); double value = numberObject.doubleValue(); System.out.println("Parsed Value is " + value); } }
上面的代碼生成以下結(jié)果。
更多建議: