天天看點

Java 格式化數字--- DecimalFormat

轉載自:http://blog.csdn.net/qq_27093465/article/category/5713091

Java 格式化數字, 取2位小數, 按位取小數, 按要求格式化小數 DecimalFormat float,double,int,等類型都支援

标簽: float取2位小數DecimalFormatJava數字格式化Java

關于float類型的數字如何保留2位小數,搜尋的結果都差不多吧,但是都沒有測試結果可以看,然後我就來總結一下,順便留下測試的過程代碼和結果。

算是留個記錄吧,以備後用。

不要說先乘以10000再除以10000啥的,都不科學。

話不多說,看法寶!!!

[java]

1. package com.lxk.test;  
2.   
3. import java.text.DecimalFormat;  
4.   
5. /** 
6.  * 數字格式化測試 
7.  * <p> 
8.  * Created by lxk on 2017/1/22 
9.  */  
10. public class DecimalFormatTest {  
11.     public static void main(String[] args) {  
12.         float scale = 34.236323F;  
13.         DecimalFormat format = new DecimalFormat("##0.00");  
14.         String dd = format.format(scale);  
15.         System.out.println(dd);  
16.         //下面簡寫  
17.         long num = 1;  
18.         //result = 9.313226E-10,也就是0.0000000009313226  
19.         float result = ((float) num) / (1024L * 1024L * 1024L);  
20.         System.out.println(result);  
21.         System.out.println(format.format(result));  
22.         System.out.println("-------------我是分界線---1----------");  
23.         showFormat(scale);  
24.         System.out.println("-------------我是分界線---2----------");  
25.         showFormat(result);  
26.         System.out.println("-------------我是分界線---3----------");  
27.         long c = 299792458L;  
28.         showFormat((float) c);  
29.     }  
30.   
31.     private static void showFormat(float value) {  
32.         //取一位整數  
33.         System.out.println(new DecimalFormat("0").format(value));  
34.         //取一位整數和兩位小數  
35.         System.out.println(new DecimalFormat("0.00").format(value));  
36.         //取兩位整數和三位小數,整數不足部分以0填補  
37.         System.out.println(new DecimalFormat("00.000").format(value));  
38.         //取所有整數部分  
39.         System.out.println(new DecimalFormat("#").format(value));  
40.         //以百分比方式計數,并取兩位小數  
41.         System.out.println(new DecimalFormat("#.##%").format(value));  
42.         //顯示為科學計數法,并取五位小數  
43.         System.out.println(new DecimalFormat("#.#####E0").format(value));  
44.         //顯示為兩位整數的科學計數法,并取四位小數  
45.         System.out.println(new DecimalFormat("00.####E0").format(value));  
46.         //每三位以逗号進行分隔。  
47.         System.out.println(new DecimalFormat(",###").format(value));  
48.         //将格式嵌入文本  
49.         System.out.println(new DecimalFormat("所傳入的格式化參數是:###大小。").format(value));  
50.     }  
51. }  
           

然後就是上面代碼的運作結果,如下:

[javascript]

1. 34.24  
2. 9.313226E-10  
3. 0.00  
4. -------------我是分界線---1----------  
5. 34  
6. 34.24  
7. 34.236  
8. 34  
9. 3423.63%  
10. 3.42363E1  
11. 34.2363E0  
12. 34  
13. 所傳入的格式化參數是:34大小。  
14. -------------我是分界線---2----------  
15. 0  
16. 0.00  
17. 00.000  
18. 0  
19. 0%  
20. 9.31323E-10  
21. 93.1323E-11  
22. 0  
23. 所傳入的格式化參數是:0大小。  
24. -------------我是分界線---3----------  
25. 299792448  
26. 299792448.00  
27. 299792448.000  
28. 299792448  
29. 29979244800%  
30. 2.99792E8  
31. 29.9792E7  
32. 299,792,448  
33. 所傳入的格式化參數是:299792448大小。  
34.   
35. Process finished with exit code 0  
           

DecimalFormat 類主要靠 # 和 0 兩種占位符号來指定數字長度。0 表示如果位數不足則以 0 填充,# 表示隻要有可能就把數字拉上這個位置。

上面的例子包含了差不多所有的基本用法。

如果你想了解更多,請參考 DecimalFormat 類的文檔。

下面是摘自jdk文檔裡面内容,雖然是1.6版本的,但是有這個類的中文介紹喲。

DecimalFormat 是 NumberFormat 的一個具體子類,用于格式化十進制數字。

該類設計有各種功能,使其能夠解析和格式化任意語言環境中的數,包括對西方語言、阿拉伯語和印度語數字的支援。

它還支援不同類型的數,包括整數 (123)、定點數 (123.4)、科學記數法表示的數 (1.23E4)、百分數 (12%) 和金額 ($123)。所有這些内容都可以本地化。

舍入

DecimalFormat 提供 RoundingMode 中定義的舍入模式進行格式化。預設情況下,它使用 RoundingMode.HALF_EVEN。

同步

DecimalFormat 通常不是同步的。建議為每個線程建立獨立的格式執行個體。如果多個線程同時通路某個格式,則必須保持外部同步。

關于 RoundingMode.HALF_EVEN的解釋:

RoundingMode這個是個枚舉類型,java.math包下。

有那麼幾個枚舉常量,分别代表不同的舍入方式。下面簡單介紹介個。

HALF_EVEN

向最接近數字方向舍入的舍入模式,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。如果舍棄部分左邊的數字為奇數,則舍入行為

同 RoundingMode.HALF_UP;如果為偶數,則舍入行為同 RoundingMode.HALF_DOWN。注意,在重複進行一系列計算時,此舍入模式可以在統計上将累加錯誤減到最小。

此舍入模式也稱為“銀行家舍入法”,主要在美國使用。此舍入模式類似于 Java 中對 float 和 double 算法使用的舍入政策。

HALF_UP

此舍入模式就是通常學校裡講的四舍五入。

HALF_DOWN

應該按上面的了解話,是五舍六入。

FLOOR

向負無限大方向舍入的舍入模式,此舍入模式始終不會增加計算值。白話文就是向下取整。

CEILING

向正無限大方向舍入的舍入模式。此舍入模式始終不會減少計算值。向上取整

UP

這個也是向上取整,但是,如果是坐标軸的話,這個都是遠離零的方向取整,5.5->6; -2.5->-3

DOWN

這個也是向下取整,但是,如果是坐标軸的話,這個都是靠近零的方向取整,5.5->5; -2.5->-2

上面這些,記也記不住,用的時候,查一下再說吧。

Java 格式化數字--- DecimalFormat

看看這個例子,再了解一下上面的舍入的解釋