Я хочу иметь параметр в одной строке в 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
? Спасибо.
Двойной параметр с 2 цифрами после точки в 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);
}