Java中的紧凑数字格式化行为(自动在十进制和科学记数法之间切换)

kos*_*tmo 5 java scientific-notation string-formatting

我正在寻找一种以标准十进制格式或科学计数法动态格式化浮点数的方法,具体取决于数字的值.

  • 对于中等大小,数字应格式化为十进制,并且尾随零被抑制.如果浮点数等于整数值,则还应该抑制小数点.
  • 对于极端量级(非常小或非常大),数字应以科学记数法表示.或者说,如果表达式中的字符数作为标准十进制表示法超过某个阈值,请切换到科学计数法.
  • 我应该控制精度的最大位数,但我不希望附加尾随零来表示最小精度; 应该抑制所有尾随零.

基本上,它应该优化紧凑性和可读性.

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位精度限制舍入导致此数字具有被剥离的尾随零)


这是我到目前为止所发现的:

  • .toString()Number类的方法完成了我想要的大部分工作,除非它尽可能不转换为整数表示,并且它不会用科学计数法表示大的积分量.另外,我不确定如何调整精度.
  • 该函数的"%G"格式字符串String.format(...)允许我以科学计数法表示数字,可调精度,但不会删除尾随零.

我想知道是否已经有一些符合这些标准的库函数.我想自己写这篇文章的唯一绊脚石就是必须从科学记数法中删除有效数字的尾随零%G.

Ted*_*dil 1

您看过DecimalFormat了吗?

(也可能感兴趣:BigDecimal#toString()