質問

ユーザー入力に基づいてフォーマットしている文字列の二重表現の精度を変えたいと思います。今、私は次のようなことをしています:

String foo = String.format("%.*f\n", precision, my_double);

しかし、私はaを受け取ります java.util.UnknownFormatConversionException. 。このアプローチの私のインスピレーションは、c printfとでした このリソース (セクション1.3.1)。

どこかで簡単な構文エラーがありますか、Javaはこのケースをサポートしていますか、それともより良いアプローチがありますか?

編集:

私は次のようなことができると思います:

String foo = String.format("%." + precision + "f\n", my_double);

しかし、私はまだそのような操作に対するネイティブのサポートに興味があります。

役に立ちましたか?

解決

あなたは自分の質問に答えました - フォーマット文字列を動的に構築します...有効なフォーマット文字列はここで概説されている規則に従います。 http://java.sun.com/j2se/1.5.0/docs/api/java/util/formatter.html#syntax.

合計8文字(小数点を含む)を占めるフォーマット済み小数を作成し、小数点の後に4桁を必要とする場合、フォーマット文字列は「%8.4f」のように見える必要があります。

私の知る限り、柔軟な形式を超えたJavaには「ネイティブサポート」はありません。

他のヒント

使用できます Decimalformat クラス。

double d1 = 3.14159;
double d2 = 1.235;

DecimalFormat df = new DecimalFormat("#.##");

double roundedD1 = df.format(d); // 3.14
double roundedD2 = df.format(d); // 1.24

実行時に精度を設定する場合は、次のように呼び出します。

df.setMaximumFractionDigits(precision)

なぜだめですか :

String form = "%."+precision+"f\n";
String foo = String.format(form, my_double);

また :

public static String myFormat(String src, int precision, Object args...)
{
    String form = "%."+precision+"f\n";
    return String.format(form, args);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top