2011-11-13 37 views
5

我正在尋找一種方法,以標準十進制格式或科學記數法動態格式化浮點數,具體取決於數值的大小。compact在Java中的數字格式化行爲(自動在十進制和科學記數法之間切換)

  • 對於中等大小的數字,應將數字格式化爲帶有抑制尾隨零的小數。如果浮點數等於整數值,則小數點也應該被抑制。
  • 對於極端數值(非常小或非常大),數字應以科學計數法表示。或者聲明,如果作爲標準十進制表示法的表達式中的字符數超過了某個閾值,則切換到科學記數法。
  • 我應該可以控制最大位數的精度,但我不想追蹤零以表示最小值精度;所有尾隨零應該被抑制。

基本上,它應該優化爲緊湊性和可讀性

2.80000 - >2.8

765.000000 - >765

0.0073943162953 - >0.00739432(精度—限位數6在這種情況下)

0.0000073943162953 - >7.39432E-6(切換至科學記數法如果在這種情況下,幅度足夠小,小於1E-5

7394316295300000 - >7.39432E+6(切換至科學記數法,如果幅度是足夠—例如,大當大於1E+10

0.0000073900000000 - >7.39E-6

0.000007299998344(條從科學記數法有效數尾隨零) - >7.3E-6(從6位精度限制舍入導致該數字具有被剝離的尾隨零)


這是我到目前爲止已經發現:

  • Number類的.toString()方法做了大部分的我想要的,只是它不上變頻,儘可能地整數表示,它不會表現大的積分幅度以科學記數法。另外,我不確定如何調整精度。
  • "%G"格式字符串到String.format(...)功能允許我表達與精度可調科學記數法表示,但不會去除尾隨零

我想知道是否已經有一些符合這些標準的庫函數。我猜想自己編寫這個唯一的絆腳石是必須從%G產生的科學記數法中去除有效數的尾隨零。

回答

相關問題