compact Javaでの数値書式動作(小数点と科学記法を自動的に切り替えます)

私は、数値の値に応じて、浮動小数点数を標準小数点形式または科学的表記法で動的にフォーマットする方法を探しています。

  • 適度な大きさの場合、数字は末尾のゼロを省略した小数でフォーマットする必要があります。浮動小数点数が整数値に等しい場合、小数点も抑止する必要があります。
  • 極端な大きさ(非常に小さいまたは非常に大きい)については、数値は科学的表記で表現する必要があります。言い換えれば、式の文字数が標準の十進数表記で一定の閾値を超えている場合は、科学記法に切り替えてください。
  • 精度の最大桁数を制御する必要がありますが、最小精度を表すために末尾のゼロを付けることは望ましくありません。すべての末尾のゼロを抑制する必要があります。

基本的には、コンパクトさと可読性のために最適化する必要があります。

2.80000 -> 2.8

765.000000 -> 765

0.0073943162953 -> 0.00739432
(limit digits of precision—to 6 in this case)

0.0000073943162953 -> 7.39432E-6
(switch to scientific notation if the magnitude is small
enough—less than 1E-5 in this case)

7394316295300000 -> 7.39432E+6
(switch to scientific notation if the magnitude is large enough—for
example, when greater than 1E+10)

0.0000073900000000 -> 7.39E-6
(strip trailing zeros from significand in scientific notation)

0.000007299998344 -> 7.3E-6
(rounding from the 6-digit precision limit causes this number to
have trailing zeros which are stripped)


これまで私が見つけたことは次のとおりです。

  • Numberクラスの
    .toString()メソッドは、可能な限り整数表現にアップコンバートしないという点を除いて、ほとんどの場合、必要な処理を行い、科学的表記法では大きな整数。また、精度を調整する方法がわかりません。
  • String.format(...)関数への "%G"
    の書式文字列を使用すると、科学的表記法で数値を調整可能な精度で表現できますが、
    >後続のゼロを取り除くことはできません

これらの基準を満たすライブラリ関数が既に存在するかどうかは疑問です。私はこれを書くための唯一の障害は、%G
によって生成された科学的表記法の仮数から後ろのゼロを取り除かなければならないことだと思います。

ベストアンサー

DecimalFormat まだ?

(興味のあるもの: BigDecimal#toString()

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です