Java 科學計數法,java計數法

來源:互聯網
上載者:User

Java 科學計數法,java計數法
Java 科學計數法Java 科學計數法
1 科學計數法的概念
1.1 有效數字
1.2 E記號
2 Java中的科學計數法
2.1 NumberFormat
2.2 DecimalFormat
2.3 BigDecimal
參考
作者資訊1 科學計數法的概念1.1 有效數字

在一個近似數中,從左邊第一個不是0的數字起,到精確到的位元止,這中間的所有數字都叫做這個近似數的有效數字
例如:
890314000保留三位有效數字為8.90×10的8次方 (四舍)
839960000保留三位有效數字為8.40×10的8次方 (五入)
0.00934593保留三位有效數字為9.35×10的-3次方

1.2 E記號

大多數計算機及電腦程式用科學記號標記法顯示非常大和非常小的結果。因為指數上標(例如1011)在螢幕上顯示不方便,字母E或e通常是用來代表的十次冪(寫作“×10b”),E或e之後的數字是它的指數;換句話說,任何兩實數a和b(b應為整數),“aEb”所表示的值是a × 10b。注意,這種用法中字母e不是數學常數e,也不是指數函數exp()(採用用大寫字母E顯示可以更大程度地避免誤解);儘管它也表示指數,但這個符號通常被稱為(科學計數法)E或e符號,而不是指數中的底數符號(儘管後者也會出現)。在正式的出版物中盡量不要使用這種顯示方法。
注意科學記號標記法中的e或E與數學常數e或函數exp沒有關係。
這種寫法是因為一些電腦程式中不方便寫上標而產生的,在正式出版物中不應當使用這種寫法。
我國國家標準中科學計數法均用a ×10b的形式表示,而不是aEb(參見GB3101-1993,GBT15835-2011,GBT8170-2008)。

2 Java中的科學計數法

在Java中,當Double的取值符合某條件時,將會以科學計數法的方式顯示(下面是個人測試的結果,非從文檔中得到的結論):

  1. @Test
  2. publicvoid testPrintScientificNotation(){
  3. //整數部分位元大於等於8時開始以科學計數法顯示
  4. System.out.println(-12345678.0);
  5. System.out.println(12345678.0);
  6. //整數位為0,當小數位以0開始連續出現大於等於3時開始以科學計數法顯示
  7. System.out.println(0.0001);
  8. System.out.println(-0.0001);
  9. }

結果

  1. -1.2345678E7
  2. 1.2345678E7
  3. 1.0E-4
  4. -1.0E-4

很多時候,我們需要做一個統一,要麼全部以科學計數法輸出,要麼就全部顯示為普通計數。
根據網上的資料,主要提及NumberFormat、DecimalFormat、BigDecimal這三種API實現方式。

2.1 NumberFormat

NumberFormat 是所有數值格式的抽象基類。

  1. publicstaticString scientificNotation2String(Double d,int newValue){
  2. String value =null;
  3. NumberFormat nf =NumberFormat.getInstance();
  4. // 設定此格式中不使用分組
  5. nf.setGroupingUsed(false);
  6. // 設定數的小數部分所允許的最大位元。
  7. nf.setMaximumFractionDigits(newValue);
  8. value = nf.format(d);
  9. return value;
  10. }

如果輸入的小數位元,大於設定的最大的小數位元,則會進行四捨五入。

2.2 DecimalFormat

DecimalFormat 是 NumberFormat 的一個具體子類,用于格式化十進位數字。該類設計有各種功能,使其能夠解析和格式化任意語言環境中的數,包括對西方語言、阿拉伯語和印度語數位支援。它還支援不同類型的數,包括整數 (123)、定點數 (123.4)、科學記號標記法表示的數 (1.23E4)、百分數 (12%) 和金額 ($123)。所有這些內容都可以本地化。

  1. publicstaticString scientificNotation2String(Double d){
  2. String value =null;
  3. DecimalFormat decimalFormat =newDecimalFormat("0.00");//格式化設定
  4. value = decimalFormat.format(d);
  5. return value;
  6. }

需要設定模版,指定小數保留的位元,傳入數值小數位元超出指定位元,則會進行四捨五入;傳入數值小數位不足指定位元,則可以設定補零。
需要將數值轉換為科學計數法只須將模版修改即可,例如將模版修改為:0.##E0

2.3 BigDecimal

BigDecimal是不可變的、任意精度的有符號十進位數。

  1. publicstaticString scientificNotation2String(String str){
  2. String value =null;
  3. BigDecimal bd =newBigDecimal(str);
  4. value = bd.toPlainString();
  5. return value;
  6. }

BigDecimal的構造方法很多,不一定是要傳入String類型的值。
BigDecimal中的toString方法和toPlanString方法的區別:

  • toString():返回此BigDecimal的字串表示形式,如果需要指數,則使用科學計數法
  • toPlainString():返回不帶指數欄位的此BigDecimal的字元傳表示形式
參考
  • 互動百科:科學計數法:http://www.baike.com/wiki/%E7%A7%91%E5%AD%A6%E8%AE%A1%E6%95%B0%E6%B3%95
  • 部落格:Java設定大數非科學計數法顯示:http://blog.csdn.net/yangfeisc/article/details/42639075
  • 部落格:如何使java中double類型不以科學計數法表示:http://vincentboy.iteye.com/blog/1647187
  • JDK API 1.6.0 中文版
作者資訊

小贊 軟體工程師
部落格園:http://www.cnblogs.com/zhanyao/
郵箱:xzhanyao@foxmail.com

歡迎指出不足,大家共同提高

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.