我正在寻找一种以标准十进制格式或科学计数法动态格式化浮点数的方法,具体取决于数字的值.
>对于中等大小,数字应格式化为十进制,并且尾随零被抑制.如果浮点数等于整数值,则还应该抑制小数点.
>对于极端量级(非常小或非常大),数字应以科学记数法表示.或者说,如果表达式中的字符数作为标准十进制表示法超过某个阈值,请切换到科学计数法.
>我应该控制精度的最大位数,但我不希望附加尾随零来表示最小精度;应该抑制所有尾随零.
基本上,它应该优化紧凑性和可读性.
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()方法完成了我想要的大部分工作,除非它在可能的情况下不会上转换为整数表示,并且它不会用科学计数法表示大的积分量.另外,我不确定如何调整精度.
> String.format(…)函数的“%G”格式字符串允许我以科学计数法表示具有可调精度的数字,但不会删除尾随零.
我想知道是否已经有一些符合这些标准的库函数.我想自己写这篇文章的唯一绊脚石就是必须从%G产生的科学记数法中删除有效数字的尾随零.