Двойной параметр с 2 цифрами после точки в strings.xml? - PullRequest
33 голосов
/ 22 марта 2012

Я хочу иметь параметр в одной строке в 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?Спасибо.

Ответы [ 4 ]

106 голосов
/ 24 сентября 2015

Просто добавляю ответ Дэвида Айрама здесь; «неправильное» решение, которое он дает, на самом деле правильное, но с небольшими изменениями. Файл 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() для преобразования строки в число с плавающей точкой, если ваши входные данные изначально были строкой (скажем, из EditText или чего-то еще). Однако вы должны всегда пытаться / ловить valueOf() операции и обрабатывать случай NumberFormatException, так как это исключение не проверено.

2 голосов
/ 07 марта 2018

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

0 голосов
/ 14 мая 2015

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

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);
0 голосов
/ 22 марта 2012

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

...