変数精度でjava string.formatをjavaする方法は?
-
21-09-2019 - |
質問
ユーザー入力に基づいてフォーマットしている文字列の二重表現の精度を変えたいと思います。今、私は次のようなことをしています:
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);
}
所属していません StackOverflow