5

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

  • 中程度の大きさの場合、数値は末尾のゼロが抑制された小数としてフォーマットする必要があります。浮動小数点数が整数値に等しい場合は、小数点も抑制される必要があります。
  • 極端な大きさ(非常に小さいまたは非常に大きい)の場合、数値は科学的記数法で表す必要があります。言い換えると、標準の10進表記としての式の文字数が特定のしきい値を超える場合は、科学的記数法に切り替えます。
  • 精度の最大桁数を制御する必要がありますが、最小精度を表すために末尾のゼロを追加したくありません。後続のゼロはすべて抑制されるべきです。

基本的に、コンパクトさと読みやすさを最適化する必要があります。

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ます。

4

1 に答える 1

1

DecimalFormatはもう見ましたか?

(これも興味深いかもしれません:BigDecimal#toString()

于 2011-11-13T10:02:45.427 に答える