如何使用十进制数(双精度数据类型)作为字符串资源中的占位符

How to use decimal numer (Double data type) as placeholder in String resource

我想在字符串资源的占位符内使用不止一种数据类型,但每当我尝试使用小数作为数值时,都会返回错误。

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

Wrong argument type for formatting argument '#1' in distance_decimalnumber_placeholder: conversion is 'd', received String (argument #2 in method call)

我想提两件事:

不要将 d 用于 double ... d 被视为 int,因此请使用 f 而不是 d。所以不要使用这个

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

并且您不需要字符类型说明符来显示 * 在 f 之后使用 * 像这样

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

请注意,我只添加了一个占位符。

第一个错误 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>