Как 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);
}