Подтвердить что ты не робот

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

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

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

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

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

Edit:

Я полагаю, я мог бы сделать что-то вроде:

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

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

4b9b3361

Ответ 1

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

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

Насколько я знаю, в Java нет "родной поддержки", за исключением того, что строки формата являются гибкими.

Ответ 2

Вы можете использовать класс 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)

Ответ 3

Почему бы и нет:

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