天天看點

最通俗易懂的Java DecimalFormat類的使用

下面代碼是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));
	}
}