Как Java String.формат с переменной точностью?

Я хотел бы изменить точность двойного представления в строке, которую я форматирую на основе пользовательского ввода. Сейчас я пытаюсь что-то вроде:

String foo = String.format("%.*fn", precision, my_double);

однако я получаю java.util.UnknownFormatConversionException. Мое вдохновение для этого подхода было C printf и на этом ресурсе (раздел 1.3.1).

у меня есть простая синтаксическая ошибка где-то, поддерживает ли Java этот случай, или есть лучший подход?

Edit:

небось Я мог бы сделать что-то вроде:

String foo = String.format("%." + precision + "fn", my_double);

но я все равно был бы заинтересован в родной поддержке такой операции.

3 ответов


вы вроде как ответили на свой вопрос-создайте строку формата динамически... допустимые строки формата следуют соглашениям, описанным здесь:http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax.

Если вы хотите форматированный десятичный знак, который занимает 8 символов (включая десятичную точку), и вы хотите 4 цифры после десятичной точки, ваша строка формата должна выглядеть как "%8.4 f"...

насколько мне известно, нет "встроенная поддержка" в 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);
}