下面代碼是DecimalFormat類的特殊字元'#', '0', '.'的使用
對于這三個字元的作用,測試比較全面,層次也比較清晰,注釋我也做的很通俗,都是邊測邊總結的。
希望對初學者有幫助,大神勿噴
import java.text.DecimalFormat;
public class DecimalFormatTest {
public static void main(String[] args) {
double num=6375314.1596;
//測試特殊字元#
//整數部分
format1("#", num); // 6375314 取出整數部分(整數部分有多少位就取多少位),小數部分不要
format1("##", num); //6375314
format1("#########", num); // 6375314 【結論】:整數部分多個#沒有意義,等效于一個#
format1(",###", num); // 6,375,314 隻有整數部分,且整數部分采用千分号(餘額的表示方法)表示
//小數部分
format1("#.#", num); //6375314.2 取出所有整數部分,保留小數點後一位(會四舍五入的)
format1(".#", num); //6375314.2 等效于上面,整數部分的那個#可省略
format1("#.######", num); //6375314.1596 【結論】假如小數點後面的#的數量超過小數的數位,那麼小數部分就全部顯示
//注意
format1("#.###", num); //照理來說應該是6375314.160,但事實上是6375314.16
//再來做個測試
format1("#.###", 0.6998 ); //0.7
format1("#.###", 0.9998); //1
//【結論】:小數部分使用#,如果四舍五入後小數部分末尾有0,則不會顯示末尾的0
//那麼如果我想保留末尾的0該咋辦?例如,餘額的表示。先做個鋪墊
format1("0.000", 0.6998); //0.700
format1("0.000", 0.9998); //1.000
//測試特殊字元0
//num=6375314.1596
//整數部分
format1("0", num); //6375314 取出所有的整數部分
format1("00", num); //6375314
format1("0000000", num); //6375314
format1("00000000", num); //06375314
format1("000000000", num); //006375314
//【結論】:當0的數量不超過整數部分的數位,一個0與多個0等效。當0的數量超過整數部分的數位,則在顯示時,高位會補0
format1(",000", num); //等效于",###"
//小數部分
format1("0.0", num); //6375314.2 取出所有整數部分,保留小數點後一位(會四舍五入的)
format1("#.0", num); //等效于上面
format1(".0", num); //等效于上面
format1("0.000000", num); //6375314.159600
//【結論】pattern參數裡面小數點後面的0的數量超過了value參數的小數數位,則顯示value時小數部分末尾不足的位置補0
//注意,與#的不同之處,上面在測試的時候也說了
format1("0.000", 0.6998); //0.700
format1("0.000", 0.9998); //1.000
//總的來說,#與0的差別:字元0比#多了個“不足就補0”的作用(一句話的【精髓】)
//在寫pattern參數時,可以根據需要,#與0搭配在一起用。舉例略
// 測試百分數%與千分數\u2030
format1("#.###%", 0.789); //78.9%
/* 解釋一下79.9%怎麼來的。
* 看見百分号,就先乘以100(右移兩位)。0.789*100=78.9。然後78.9按照格式“#.###”的規則顯示:78.9。最後後面還有個%
*/
//再舉一個例子,對比一下
format1("0.000%", 0.789); //78.900% 同理,但注意0與#的差別
//千分數跟上面也是同理,隻不過是乘1000(右移3位)而已
format1("0.00\u2030", 0.789); //789.00‰
//看見千分号(\u2030),就先乘以1000(右移3位)。0.789*1000=789。然後789按照格式“0.00”的規則顯示:789.00。最後後面還有個千分号
}
//在測試之前,我們先做一下簡單的封裝,友善在main函數裡面測試時調用
//下面兩個函數效果是一樣的,但實作的思路有點不同
//在執行個體化DecimalFormat對象時就設定數字格式化模闆
public static void format1(String pattern, double value)
{
DecimalFormat myFormat=new DecimalFormat(pattern);
System.out.println(value+"\t"+pattern+"\t"+myFormat.format(value));
}
//執行個體化DecimalFormat對象後,再通過applyPattern()方法設定數字格式化模闆
public static void format2(String pattern, double value)
{
DecimalFormat myFormat=new DecimalFormat();
myFormat.applyPattern(pattern);
System.out.println(value+"\t"+pattern+"\t"+myFormat.format(value));
}
}