Как java string.format с переменной точностью?
-
21-09-2019 - |
Вопрос
Я хотел бы изменить точность двойного представления в строке, которую я форматирую на основе пользовательского ввода. Прямо сейчас я пробую что -то вроде:
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);
}