strings.xml中点后的2位双参数?

时间:2012-03-22 10:10:55

标签: android string formatter

我想在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值?感谢。

6 个答案:

答案 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);
}