Как использовать десятичное число (тип данных Double) в качестве заполнителя в ресурсе String - PullRequest
1 голос
/ 27 апреля 2020

Я хочу использовать более 1 типа данных внутри заполнителя в ресурсе String, но всякий раз, когда я пытаюсь использовать в качестве числового значения химическое число, возвращается ошибка.

Kotlin

val currentLocale = Locale.getDefault()
val distanceWalked = 5.2
val numberFormatter: NumberFormat
val amountOut: String
numberFormatter = NumberFormat.getNumberInstance(currentLocale)
amountOut = numberFormatter.format(distanceWalked)

tv.txt = getString(R.string.distance_decimalnumber_placeholder,amountOut,"*")

Ресурсы перемешивания

<string name="distance_decimalnumber_placeholder">You have walked %1$d%2$s metres</string>

Ожидаемый результат

Вы прошли 5,2 * метра

Ошибка

java .util.IllegalFormatConversionException: d! = java .lang.Double

Неправильный тип аргумента для аргумент форматирования '# 1' в distance_decimalnumber_placeholder: преобразование 'd', полученная строка (аргумент # 2 в вызове метода)

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Первая ошибка d для целых чисел

Проблема:

Вы преобразованы в строку по адресу: amountOut = numberFormatter.format(distanceWalked) вам нужно заменить на строку

Решение : Вам не нужно использовать $f вам нужно использовать $s

tv.txt = getString(R.string.distance_decimalnumber_placeholder,amountOut /* this is a string also*/ ,"*")
<string name="distance_decimalnumber_placeholder">You have walked %1$s%2$s metres</string>
1 голос
/ 27 апреля 2020

Я хотел бы упомянуть две вещи:

Не используйте d для двойного ... d рассматривается как int, поэтому используйте f вместо d. Так что не используйте это

 <string name="distance_decimalnumber_placeholder">You have walked %1$d%2$s metres</string>

И вам не нужен спецификатор диаграммы для отображения * use * после f, как это

 <string name="distance_decimalnumber_placeholder">You have walked %1$f* metres</string>

Обратите внимание, что я добавил только один местодержатель.

...