web-dev-qa-db-ja.com

java printf( "%*。* f")と同等

Cでは、printf()ステートメントを使用して、パラメーターリストで精度の長さを指定できます。

printf("%*.*f", 7, 3, floatValue);

ここで、アスタリスクはそれぞれ最初の値と2番目の値に置き換えられます。

Android/Javaで同等のものを探しています。 String.format()は例外をスローします。

編集:ありがとう、@ Tenner;それは確かに機能します。

19
vedavis

私が使う

int places = 7;
int decimals = 3;

String.format("%" + places + "." + decimals + "f", floatValue);

少し見苦しい(そして文字列を連結するとうまく機能しない)が、機能する。

15
James Cronen
System.out.print(String.format("%.1f",floatValue));

これは、小数点以下1桁の精度でfloatValueを出力します。

3
brthornbury

あなたはフォーマットをフォーマットすることができます:

String f = String.format("%%%d.%df", 7, 3);
System.out.println(f);
System.out.format(f, 111.1111);

これは出力します:

%7.3f
111,111

次のような小さなヘルパーを使用することもできます。

public static String deepFormatter(String format, Object[]... args) {
    String result = format;
    for (int  i = 0; i != args.length; ++i) {
        result = String.format(result, args[i]);
    }

    return result;
}

次の呼び出しは、上記のコードと同等で、111,111を返します。

deepFormatter("%%%d.%df", new Object[] {7, 3}, new Object[] {111.1111});

これはprintfほどきれいではなく、入力フォーマットが乱雑になる可能性がありますが、それを使用すればさらに多くのことができます。

1
gxtaillon

こんな感じです...

_%AFWPdatatype
_

A-引数の数

F-フラグ

W-幅

P-精度

String.format("%.1f",float_Val);

0