ユーザー入力に基づいてフォーマットしている文字列の二重表現の精度を変えたいのですが。今、私は次のようなことを試みています:
String foo = String.format("%.*f\n", precision, my_double);
ただし、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);
}