我想在strings.xml
的一个字符串中有一个参数,这个参数应该是一个double值。所以我使用%1$f
。在这里 - http://developer.android.com/reference/java/util/Formatter.html有很多例子,但是如果我想拥有一些double/float
参数并且我只希望第二个参数在.
之后有两位数呢?我尝试使用%2$.2f
或%2.2$f
等组合。他们也没有工作。 %.1f
不起作用。
那么,是否有人知道如何在float/double
内“自定义”strings.xml
值?感谢。
答案 0 :(得分:103)
在这里添加@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()
或其他内容),您可以使用EditText
将String转换为float。但是,您应该始终尝试/捕获valueOf()
操作并处理NumberFormatException
情况,因为未检查此异常。
答案 1 :(得分:2)
%。如果您希望在&#39;之后只显示1位数,那么我可以为我工作,
答案 2 :(得分:2)
定义为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));
答案 3 :(得分:0)
这对我有用。
<string name="market_price">Range ₹%1$.0f - ₹%2$.0f</string>
android:text="@{@string/market_price(viewModel.suggestedPriceRange.max, viewModel.suggestedPriceRange.min)}"
输出:Range ₹500 - ₹1000
在 ₹%1$.0f
中,.0f
定义了您想要的小数点后的位数。
答案 4 :(得分:-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。
<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 :(得分:-6)
如果是我,我会将资源中的值存储为简单值,然后使用格式化程序方法来控制它们的显示方式,大致如下
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);
}