我正在寻找一种方法以标准十进制格式或科学记数法动态格式化浮点数,具体取决于数字的值。
- 对于中等幅度,数字应格式化为小数,并抑制尾随零。如果浮点数等于整数值,小数点也应该被抑制。
- 对于极端震级(非常小或非常大),数字应以科学计数法表示。或者说,如果作为标准十进制表示法的表达式中的字符数超过某个阈值,则切换到科学计数法。
- 我应该控制精度的最大位数,但我不希望附加尾随零来表示最小精度;应抑制所有尾随零。
基本上,它应该针对紧凑性和可读性进行优化。
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
.