Java浮點類型的格式化,java浮點格式化

來源:互聯網
上載者:User

Java浮點類型的格式化,java浮點格式化
概述

基於Java,介紹將浮點類型小數進行格式化的方案。

本文

在Java中,用于格式化小數的類是java.text.DecimalFormat,比如你可以這樣使用:

double data = 3334590479.22d;System.out.println(data); // 3.33459047922E9java.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指定格式,則用指定的格式。

格式"$#,###.##"包含以下語義:

  

1. 首碼為$
2. 整數部分每3位元為一組
3. 最多保留2位小數

關于格式

一個格式的大致結構是:Prefixopt Number Suffixopt,即首碼 + 數字 + 尾碼;其中首碼和尾碼都是可選的。

關於分組

組分隔字元使用,且只能在整數部分使用;不管模式中有多少個分隔字元,最右邊的那一個有效;每一組的個數就是最右邊的分隔字元之右的整數位元。

所以"#,##,###,####" == "######,####" == "##,####,####"

關於小數

小數分隔字元使用.,用以分隔整數部分和小數部分。

關於數字特殊字元
  

1. #
#是一個特殊字元,用於數字部分;它表示顯示數字,但是最前面和最後面的0不予顯示。

data:02222.20pattern:",###.##"
result:2,222.2

#用於整數部分沒有數位的限制,但是用於小數部分,卻有“最多隻能有多少位小數的意思”,多餘的進行舍入。比如:

data:2222.222pattern:",###.##"result:2,222.22

2. 0
0和#的用法是相近的,卻又略有不同;不同之處在於:
a. 0限制整數部分最少出現的位元;不足這個位元的,前面補0

data:22.26
pattern:"0,000.00"result:0,022.26

b. 0限制小數部分出現的位元;不足補0,多的舍入

data:22.26
-----------------
pattern:"00.000"result:22.260
-----------------
pattern:"00.0"
result:22.3

3. E
科學標記法,尾數和指數的分隔字元。
具體內容見後文。

關於首碼、尾碼

除\uFFFE, \uFFFF和特殊字元之外的任意Unicode字元,都可以作為首碼、尾碼;有四個特殊的字元:

  

1. %
將數字乘以100

data:1234.567pattern:",###.##%"result:123,456.7%

2. \u2030
將數字乘以1000

data:1234.567pattern:",###.##\u2030"result:1,234,567‰

3. ¤(\u00A4)
本地化貨幣符號,如果連續出現兩次,代表貨幣符號的國際代號。

data:1234.567---------------------pattern:",###.##¤"result:1,234.57¥---------------------pattern:",###.##¤¤"result:1,234.57CNY

4. '
用於引用特殊的字元,作為首碼或尾碼。

data:1234.567pattern:"'#',###.##"result:#1,234.57

如果想使用'本身作為首碼或尾碼,連續輸入兩次:

data:1234.567pattern:"'',###.##"result:'1,234.57
關於科學標記法

科學標記法是在數字部分的尾部添加如E0的內容,其中E是尾數和指數的分隔字元,E後面的0的個數表示指數的最少位元(不足前面補0)。

data:1E5pattern:0.#E00result:1E05 // 注意指數有2位

E的前面必須要有內容,至少要有一個#或者0,否則E就被當作首碼處理了:

data:1E5---------------pattern:"E0"result:E100000---------------
pattern:"0E0"result:1E5---------------
pattern:"#E0"result:.1E6

指數部分沒有多少內容,下面討論尾數部分。

尾數一般包括整數和小數,如果整數部分沒有內容(.前面沒有內容),有效數字就全部在小數上:

data:12345E5pattern:".###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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.