五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > Java DecimalFormat數(shù)字格式化的主要功能及使用方法

Java DecimalFormat數(shù)字格式化的主要功能及使用方法

文章來源:365jz.com     點(diǎn)擊數(shù):1052    更新時間:2018-05-28 16:28   參與評論
DecimalFormat 是 NumberFormat 的一個具體子類,用于格式化十進(jìn)制數(shù)字。該類設(shè)計有各種功能,使其能夠分析和格式化任意語言環(huán)境中的數(shù),包括對西方語言、阿拉伯語和印度語數(shù)字的支持。它還支持不同類型的數(shù),包括整數(shù) (123)、定點(diǎn)數(shù) (123.4)、科學(xué)記數(shù)法表示的數(shù) (1.23E4)、百分?jǐn)?shù) (12%) 和金額 ($123)。所有這些內(nèi)容都可以本地化。 

DecimalFormat 包含一個模式 和一組符號 

符號含義: 

 

符號 位置 本地化? 含義
0 數(shù)字 阿拉伯?dāng)?shù)字
# 數(shù)字字 阿拉伯?dāng)?shù)字,如果不存在則顯示為空
. 數(shù)字 小數(shù)分隔符或貨幣小數(shù)分隔符
- 數(shù)字 減號
, 數(shù)字 分組分隔符
E 數(shù)字 分隔科學(xué)計數(shù)法中的尾數(shù)和指數(shù)。在前綴或后綴中無需加引號。
; 子模式邊界 分隔正數(shù)和負(fù)數(shù)子模式
% 前綴或后綴 乘以 100 并顯示為百分?jǐn)?shù)
/u2030 前綴或后綴 乘以 1000 并顯示為千分?jǐn)?shù)
¤(/u00A4) 前綴或后綴 貨幣記號,由貨幣符號替換。如果兩個同時出現(xiàn),則用國際貨幣符號替換。如果出現(xiàn)在某個模式中,則使用貨幣小數(shù)分隔符,而不使用小數(shù)分隔符。
' 前綴或后綴 用于在前綴或或后綴中為特殊字符加引號,例如 "'#'#" 將 123 格式化為 "#123"。要創(chuàng)建單引號本身,請連續(xù)使用兩個單引號:"# o''clock"。

例子:

DecimalFormat df1 = new DecimalFormat("0.0");  
DecimalFormat df2 = new DecimalFormat("#.#");  
DecimalFormat df3 = new DecimalFormat("000.000");  
DecimalFormat df4 = new DecimalFormat("###.###");  
System.out.println(df1.format(12.34));  
System.out.println(df2.format(12.34));  
System.out.println(df3.format(12.34));  
System.out.println(df4.format(12.34));  

運(yùn)行結(jié)果:
12.3
12.3
012.340
12.34  

DecimalFormat format = new DecimalFormat("###,####.000");  
System.out.println(format.format(111111123456.1227222));  
 
Locale.setDefault(Locale.US);  
DecimalFormat usFormat = new DecimalFormat("###,###.000");  
System.out.println(usFormat.format(111111123456.1227222));  
 
DecimalFormat addPattenFormat = new DecimalFormat();  
addPattenFormat.applyPattern("##,###.000");  
System.out.println(addPattenFormat.format(111111123456.1227));  
 
DecimalFormat zhiFormat = new DecimalFormat();  
zhiFormat.applyPattern("0.000E0000");  
System.out.println(zhiFormat.format(10000));  
System.out.println(zhiFormat.format(12345678.345));  
 
DecimalFormat percentFormat = new DecimalFormat();  
percentFormat.applyPattern("#0.000%");  
System.out.println(percentFormat.format(0.3052222));   

運(yùn)行結(jié)果 :
1111,1112,3456.123
111,111,123,456.123
111,111,123,456.123
1.000E0004
1.235E0007
30.522%

如果使用具有多個分組字符的模式,則最后一個分隔符和整數(shù)結(jié)尾之間的間隔才是使用的分組大小。所以 "#,##,###,####" == "######,####" == "##,####,####"。
我們經(jīng)常要將數(shù)字進(jìn)行格式化,比如取2位小數(shù),這是最常見的。Java 提供 DecimalFormat 類,幫你用最快的速度將數(shù)字格式化為你需要的樣子。下面是常用的例子:

import java.text.DecimalFormat;
public class Test{
    public static void main(String[] args){
        double pi=3.1415927;//圓周率
        //取一位整數(shù)
        System.out.println(new DecimalFormat("0").format(pi));//3
        //取一位整數(shù)和兩位小數(shù) 
        System.out.println(new DecimalFormat("0.00").format(pi));//3.14
        //取兩位整數(shù)和三位小數(shù),整數(shù)不足部分以0填補(bǔ)。 
        System.out.println(new DecimalFormat("00.000").format(pi));//03.142 
        //取所有整數(shù)部分 
        System.out.println(new DecimalFormat("#").format(pi));//3 
        //以百分比方式計數(shù),并取兩位小數(shù) 
        System.out.println(new DecimalFormat("#.##%").format(pi));//314.16% 
       
        long c=299792458;//光速 
        //顯示為科學(xué)計數(shù)法,并取五位小數(shù) 
        System.out.println(new DecimalFormat("#.#####E0").format(c));//2.99792E8 
        //顯示為兩位整數(shù)的科學(xué)計數(shù)法,并取四位小數(shù) 
        System.out.println(new DecimalFormat("00.####E0").format(c));//29.9792E7 
        //每三位以逗號進(jìn)行分隔。 
        System.out.println(new DecimalFormat(",###").format(c));//299,792,458 
        //將格式嵌入文本 
        System.out.println(new DecimalFormat("光速大小為每秒,###米").format(c)); //光速大小為每秒299,792,458米
    }
}

DecimalFormat 類主要靠 # 和 0 兩種占位符號來指定數(shù)字長度。0 表示如果位數(shù)不足則以 0 填充,# 表示只要有可能就把數(shù)字拉上這個位置。上面的例子包含了差不多所有的基本用法,如果你想了解更多,請參考 DecimalFormat 類的文檔。

今天遇到一個奇怪的問題,就是java.text.DecimalFormat的format方法遇到小數(shù)位5不進(jìn)位的問題。
例如:

import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("#.##");
String testStr = df.format(3.165);
System.out.println(testStr);

輸出的結(jié)果是:

3.16

Process finished with exit code 0

原因是這個函數(shù)的默認(rèn)舍入策略是四舍六入五奇偶。具體策略如下:

如4.56就是4.6,最后一位小數(shù)大于等于6就向前進(jìn)一位.
4.54就是4.5,最后一位小數(shù)小于等于4,就舍去
4.45就是4.4 4.55就是4.6最后一位小數(shù)是5的時候,當(dāng)前一位是奇數(shù)的時候就進(jìn)一位湊成偶數(shù),當(dāng)前一位是偶數(shù)的時候就舍去.
所以如果要使用我們常用的四舍五入,需要加一句:

df.setRoundingMode(RoundingMode.HALF_UP);

搞定!

DecimalFormat適用于十進(jìn)制數(shù)字的格式化

//沒有帶數(shù)字格式的實(shí)例化
        // DecimalFormat format = new DecimalFormat();
        // format.applyPattern("#");//當(dāng)實(shí)例化沒有傳遞數(shù)字格式的時候,使用該方法傳入數(shù)字格式
        //數(shù)字格式的實(shí)例化
        DecimalFormat format = new DecimalFormat("#");
        /**
         * java.math.RoundingMode
         * 遠(yuǎn)離零方向舍入的舍入模式。始終對非零舍棄部分前面的數(shù)字加 1。注意,此舍入模式始終不會減少計算值的絕對值。
         * RoundingMode.UP 舍入為一位數(shù)1.1-> 2   2.5->3   -1.1->-2
         * 向零方向舍入的舍入模式。從不對舍棄部分前面的數(shù)字加 1(即截尾)。注意,此舍入模式始終不會增加計算值的絕對值。
         * RoundingMode.DOWN 舍入為一位數(shù) 1.1->1 2.5->2   -1.1->-1
         *  向正無限大方向舍入的舍入模式。如果結(jié)果為正,則舍入行為類似于 RoundingMode.UP;如果結(jié)果為負(fù),則舍入行為類似于 RoundingMode.DOWN
         *  RoundingMode.CEILING  舍入為一位數(shù) 1.1->2   2.5->3   -1.1->-1  -2.5->-2
         *  向負(fù)無限大方向舍入的舍入模式。如果結(jié)果為正,則舍入行為類似于 RoundingMode.DOWN;如果結(jié)果為負(fù),則舍入行為類似于RoundingMode.UP
         *  RoundingMode.FLOOR   舍入為一位數(shù) 1.1->1   2.5->2   -1.1->-2  -2.5->-3
         *  向最接近數(shù)字方向舍入的舍入模式,如果與兩個相鄰數(shù)字的距離相等,則向上舍入。如果被舍棄部分 >= 0.5,則舍入行為同 RoundingMode.UP;否則舍入行為同RoundingMode.DOWN。注意,此舍入模式就是通常學(xué)校里講的四舍五入。
         * RoundingMode.HALF_UP  舍入為一位數(shù) 1.1->1   2.5->2   -1.1->-1  -2.5->-3
         * ...
         */
        format.setRoundingMode(RoundingMode.HALF_UP);//設(shè)置格式化時的舍入方式
        // public final String format (Object obj) 表示可以傳遞任意參數(shù)
        // public final String format(double number)\
        // public final String format(long number)...
        String result = format.format(123123.123123);//參數(shù)表示需要格式化的數(shù)字或者數(shù)字類型的字符串 result就是格式化后的字符串


特殊字符說明
“0” 指定位置不存在數(shù)字則顯示為0  123.123 ->0000.0000 ->0123.1230
  "#" 指定位置不存在數(shù)字則不顯示 123.123 -> ####.#### ->123.123
  "."  小數(shù)點(diǎn)
  "%" 會將結(jié)果數(shù)字乘以100 后面再加上% 123.123 ->#.00->1.3212%
 

api中文幫助文檔關(guān)于"#"的翻譯是錯誤的,原文為“zero shows as absent”譯為“如果為0,則不顯示”。

代碼示例:

new  java.text.DecimalFormat("#.###").format(3.0)
new  java.text.DecimalFormat("0.000").format(3.0)

輸出的結(jié)果為: 3 和3.000

 

"#"可以理解為在正常的數(shù)字顯示中,如果前綴與后綴出現(xiàn)不必要的多余的0,則將其忽略。

如對本文有疑問,請?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評論 (1052人查看,0條評論)
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
昵稱:
最新評論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號