Java эквивалентно printf ( "% *. * f" )

В C оператор printf() позволяет предоставлять длины точности в списке параметров.

printf("%*.*f", 7, 3, floatValue);

где звездочки заменяются на первое и второе значения соответственно.

Я ищу эквивалент в Android/Java; String.format() выдает исключение.

EDIT: Спасибо, @Tenner; он действительно работает.

Ответы

Ответ 1

Я использую

int places = 7;
int decimals = 3;

String.format("%" + places + "." + decimals + "f", floatValue);

Немного уродливый (и конкатенация строк делает его неэффективным), но он работает.

Ответ 2

System.out.print(String.format("%.1f",floatValue));

Это печатает floatValue с 1 десятичной точностью

Ответ 3

Вы можете форматировать формат:

String f = String.format("%%%d.%df", 7, 3);
System.out.println(f);
System.out.format(f, 111.1111);

Это выведет:

%7.3f
111,111

Вы также можете использовать небольшой помощник, например:

public static String deepFormatter(String format, Object[]... args) {
    String result = format;
    for (int  i = 0; i != args.length; ++i) {
        result = String.format(result, args[i]);
    }

    return result;
}

Следующий вызов будет тогда эквивалентен вышеприведенному коду и возвращает 111,111.

deepFormatter("%%%d.%df", new Object[] {7, 3}, new Object[] {111.1111});

Это не так хорошо, как printf, и формат ввода может быть загроможден, но вы можете сделать гораздо больше с ним.

Ответ 4

Как это...

%AFWPdatatype

A - Число аргументов

F - Флаги

W - Ширина

P - Точность

String.format("%.1f",float_Val);