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

Posted

技术标签:

【中文标题】Java中的紧凑数字格式化行为(在十进制和科学记数法之间自动切换)【英文标题】:compact Number formatting behavior in Java (automatically switch between decimal and scientific notation) 【发布时间】:2011-12-27 23:41:44 【问题描述】:

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

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

基本上,它应该针对紧凑性和可读性进行优化。

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产生的科学计数法中去除尾随零。

【问题讨论】:

【参考方案1】:

你看过DecimalFormat了吗?

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

【讨论】:

以上是关于Java中的紧凑数字格式化行为(在十进制和科学记数法之间自动切换)的主要内容,如果未能解决你的问题,请参考以下文章

科学记数法 Java

matplotlib colorbar:需要在bar顶部使用指数强制科学记数法

将不同的数字转换为小数 C#(科学记数法到十进制)

与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致

Angularjs避免数字过滤器的科学记数法

科学记数法如何批量转换成正常的文本或者数字