2017-04-16 10 views
2

私はいくつかの計算を行うためにJavaを使用しています。結果は、 "9.2233720368E11"のような複雑な形式になります。勢力の数を丸めるために鍬10から5小数

私はこの数値を5桁の小数点以下に丸め、10 "E11"の力を保ちたいと思います。 私は10(E)のパワーが結果に表示されるまで、正常に動作します。このコード

rounded = Math.round(subnitOut * 100000.0)/100000.0; 

を試してみました、それがすべてでは動作しません。

これを直接行う方法はありますか?あるいは、私はそれをテキストとして扱い、テキストメソッドを使用して不要な数値を整えなければなりません。

+0

あなたのアプローチがあるため、浮動小数点精度の動作しませんので、除算と乗算が多数 – ktul

答えて

4

指数を維持しながら、それが唯一の小数点以下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.2233760368E119.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 
+0

おかげでたくさんのために望ましい効果を持っていません。それは働いた – Bari

+0

@バリーようこそ! –

関連する問題