Двойной параметр с 2 цифрами после точки в strings.xml?

Я хочу иметь параметр в одной строке в strings.xml, и этот параметр должен быть двойным. Поэтому я использую %1$f. Здесь - http://developer.android.com/reference/java/util/Formatter.html есть много примеров, но что, если я хочу иметь несколько параметров double/float, и я хочу только второй иметь 2 цифры после .? Я пытался использовать комбинации типа %2$.2f или %2.2$f. Они тоже не работали. %.1f тоже не работает. Итак, кто-нибудь знает, как я могу "настроить" значение float/double внутри strings.xml? Спасибо.

Ответ 1

Просто добавьте в @David Airam ответ здесь; "неправильное" решение, которое он дает, на самом деле правильное, но с небольшим количеством настроек. Файл XML должен содержать:

<string name="resource1">Hello string: %1$s, and hello float: %2$.2f.</string>

Теперь в коде Java:

String svalue = "test";
float sfloat= 3.1415926;
String sresult = getString(R.string.resource1, svalue, sfloat);

Исключением, о котором сообщалось @David Airam, является попытка замять String в спецификаторе формата с помощью %f, для которого требуется тип с плавающей точкой. Используйте float, и такого исключения нет.

Кроме того, вы можете использовать Float.valueOf() для преобразования String в float в случае, если ваши исходные данные были первоначально строкой (скажем, от EditText или что-то еще). Однако вы всегда должны пытаться/улавливать операции valueOf() и обрабатывать случай NumberFormatException, так как это исключение не отмечено.

Ответ 2

%.1f работает для меня, если вы хотите показывать только 1 цифру после ','

Ответ 3

Определить файл strings.xml

  <string name="price_format">$%,.2f</string>

//For using in databinding  where amount is double type
    android:text="@{@string/price_format(model.amount)}"

//For using in java runtime where priceOfModifier is double type
                amountEt.setText(context.getResources().getString(R.string.price_format, priceOfModifier));

Ответ 4

Теперь, когда этот ответ приходит слишком поздно... но я надеюсь, что смогу помочь другим людям:

Android отстой с несколькими заменами параметров, когда вы хотите десятичные числа и отформатируйте это в общем стиле% a.bf

Лучшее решение, которое я нашел (и только для этих ресурсов), ставит десятичные параметры как строки% n $s, а в коде применяется мое преобразование с помощью String.format(...)



Пример:


НЕПРАВИЛЬНЫЙ ПУТЬ:

//В файле xml:

<string name="resource1">You has a desviation of %1$s and that is a %2$.2f%% percentage.</string>

//И в java файле

  String sresult = getString(R.string.resource1, svalue, spercentage); // <-- exception!

Это решение технически корректно, но неверно из-за системы ресурсов подмены android, поэтому последняя строка генерирует исключение.



ПРАВИЛЬНЫЙ ПУТЬ/РЕШЕНИЕ:

Просто преобразуйте второй параметр в строку.

<string name="resource1">You has a desviation of %1$s and that is a %2$s percentage.</string>

И теперь в коде:

...

  // This is the auxiliar line added to solve the problem
  String spercentage = String.format("%.2f%%",percentage);

  // This is the common code where we use the last variable.
  String sresult = getString(R.string.resource1, svalue, spercentage);

Ответ 5

Если бы это был я, я бы сохранил значения в ресурсах как простые значения, а затем использовал методы форматирования, чтобы контролировать, как они отображаются, примерно так же

public String formatFigureTwoPlaces(float value) {
    DecimalFormat myFormatter = new DecimalFormat("##0.00");
    return myFormatter.format(value);
}

public String formatFigureOnePlace(float value) {
    DecimalFormat myFormatter = new DecimalFormat("##0.0");
    return myFormatter.format(value);
}