Ответ 1
Я использую
int places = 7;
int decimals = 3;
String.format("%" + places + "." + decimals + "f", floatValue);
Немного уродливый (и конкатенация строк делает его неэффективным), но он работает.
В C оператор printf() позволяет предоставлять длины точности в списке параметров.
printf("%*.*f", 7, 3, floatValue);
где звездочки заменяются на первое и второе значения соответственно.
Я ищу эквивалент в Android/Java; String.format() выдает исключение.
EDIT: Спасибо, @Tenner; он действительно работает.
Я использую
int places = 7;
int decimals = 3;
String.format("%" + places + "." + decimals + "f", floatValue);
Немного уродливый (и конкатенация строк делает его неэффективным), но он работает.
System.out.print(String.format("%.1f",floatValue));
Это печатает floatValue с 1 десятичной точностью
Вы можете форматировать формат:
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, и формат ввода может быть загроможден, но вы можете сделать гораздо больше с ним.
Как это...
%AFWPdatatype
A
- Число аргументов
F
- Флаги
W
- Ширина
P
- Точность
String.format("%.1f",float_Val);