Вопрос

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

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top