指数を維持しながら、それが唯一の小数点以下5桁を示しているように、科学的表記の浮動小数点数をフォーマットするには、次のように使用することができます。
double d = 9.2233720368E11;
DecimalFormat df = new DecimalFormat("0.00000E0");
System.out.println(df.format(d));
>> 9.22337E11
あなたが言うことができるように、0
秒数が渡されましたDecimalFormat
コンストラクタ(E
の前)は、印刷する小数点以下の桁数を指定します。 0
の数値にE
を追加すると、指数に使用する桁数が決まります。これはdouble
も同様に丸めるので、9.2233760368E11
は9.22338E11
となります。
EDIT:結果を別の方法でフォーマットする必要がある場合に備えて、メソッドを作成しました。
public static String format(double d, int numDecimalPlaces, int numExponentDigits) {
StringBuilder sb = new StringBuilder("0.%0");
sb.append(numDecimalPlaces);
sb.append("d");
sb.append("E");
sb.append("%0");
sb.append(numExponentDigits);
sb.append("d");
return new DecimalFormat(String.format(sb.toString(), 0, 0)).format(d);
}
使用法:
double d = 9.2233760368E11;
System.out.println(format(d, 5, 1));
>> 9.22338E11
あなたのアプローチがあるため、浮動小数点精度の動作しませんので、除算と乗算が多数 – ktul