我正在尋找一種方法,以標準十進制格式或科學記數法動態格式化浮點數,具體取決於數值的大小。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
產生的科學記數法中去除有效數的尾隨零。
+1上的BigDecimal#的toString –