基於Java,介紹將浮點類型小數進行格式化的方案。java
在Java中,用於格式化小數的類是java.text.DecimalFormat,好比你能夠這樣使用:spa
double data = 3334590479.22d; System.out.println(data); // 3.33459047922E9 java.text.DecimalFormat df = new java.text.DecimalFormat("$#,###.##"); String result = df.format(data); System.out.println(result); // $3,334,590,479.22
對於比較大的數值,默認使用科學表示法(scientific notation);使用java.text.DecimalFormat指定格式,則用指定的格式。code
格式"$#,###.##"包含如下語義:orm
1. 前綴爲$
2. 整數部分每3位數爲一組
3. 最多保留2位小數blog
一個格式的大體結構是:Prefixopt Number Suffixopt,即前綴 + 數字 + 後綴;其中前綴和後綴都是可選的。ci
組分隔符使用,
且只能在整數部分使用;無論模式中有多少個分隔符,最右邊的那一個有效;每一組的個數就是最右邊的分隔符之右的整數位數。it
因此"#,##,###,####"
== "######,####"
== "##,####,####"
。io
小數分隔符使用.
,用以分隔整數部分和小數部分。form
1.
#
#是一個特殊字符,用於數字部分;它表示顯示數字,可是最前面和最後面的0不予顯示。classdata:02222.20 pattern:",###.##"
result:2,222.2#用於整數部分沒有數位的限制,可是用於小數部分,卻有「最多隻能有多少位小數的意思」,多餘的進行舍入。好比:
data:2222.222 pattern:",###.##" result:2,222.22
2.
0
0和#的用法是相近的,卻又略有不一樣;不一樣之處在於:
a. 0限制整數部分最少出現的位數;不足這個位數的,前面補0data:22.26
pattern:"0,000.00" result:0,022.26b. 0限制小數部分出現的位數;不足補0,多的舍入
data:22.26
-----------------
pattern:"00.000" result:22.260
-----------------
pattern:"00.0"
result:22.33. E
科學表示法,尾數和指數的分隔符。
具體內容見後文。
除\uFFFE, \uFFFF和特殊字符以外的任意Unicode字符,均可以做爲前綴、後綴;有四個特殊的字符:
1. %
將數字乘以100data:1234.567 pattern:",###.##%" result:123,456.7%2. \u2030
將數字乘以1000data:1234.567 pattern:",###.##\u2030" result:1,234,567‰3. ¤(\u00A4)
本地化貨幣符號,若是連續出現兩次,表明貨幣符號的國際代號。data:1234.567 --------------------- pattern:",###.##¤" result:1,234.57¥ --------------------- pattern:",###.##¤¤" result:1,234.57CNY4. '
用於引用特殊的字符,做爲前綴或後綴。data:1234.567 pattern:"'#',###.##" result:#1,234.57若是想使用'自己做爲前綴或後綴,連續輸入兩次:
data:1234.567 pattern:"'',###.##" result:'1,234.57
科學表示法是在數字部分的尾部添加如E0的內容,其中E是尾數和指數的分隔符,E後面的0的個數表示指數的最少位數(不足前面補0)。
data:1E5 pattern:0.#E00 result:1E05 // 注意指數有2位
E的前面必需要有內容,至少要有一個#或者0,不然E就被看成前綴處理了:
data:1E5 --------------- pattern:"E0" result:E100000 ---------------
pattern:"0E0" result:1E5 ---------------
pattern:"#E0" result:.1E6
指數部分沒有多少內容,下面討論尾數部分。
尾數通常包括整數和小數,若是整數部分沒有內容(.前面沒有內容),有效數字就所有在小數上:
data:12345E5 pattern:".###E0" result:.123E10
若是整數部分須要保留幾位數,就使用幾個0(使用#的結果有點匪夷所思,你們自行嘗試):
data:12345E5 ---------------------- pattern:"0.###E0" result:1.234E9 ---------------------- pattern:"00.###E0" result:12.345E8 --------------------- pattern:"000.###E0" result:123.45E7
小數部分,若是想實現「最多保留幾位小數」的效果,在pattern的.以後添加相應個#。這樣,多餘的會舍入;若是想實現「剛好保留幾位小數」的效果,在pattern的.以後添加相應個0。這樣,缺乏會在後面補0,多餘的會舍入。
data:123E5 ------------------ pattern:"0.#E0" result:1.2E7 ------------------ pattern:"0.##E0" result:1.23E7 ------------------ pattern:"0.###E0" result:1.23E7 ================== pattern:"0.0E0" result:1.2E7 ------------------ pattern:"0.00E0" result:1.23E7 ------------------ pattern:"0.000E0" result:1.230E7