31

ユーザー入力に基づいて書式設定している文字列の double 表現の精度を変更したいと考えています。今、私は次のようなことを試みています:

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);

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

4

4 に答える 4

17

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

合計 8 文字 (小数点を含む) を占める書式設定された 10 進数が必要で、小数点以下 4 桁が必要な場合、書式文字列は "%8.4f" のようになります...

私の知る限り、Java にはフォーマット文字列が柔軟であること以外に「ネイティブ サポート」はありません。

于 2010-02-20T04:39:39.150 に答える
8

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)
于 2016-06-30T11:55:53.653 に答える