Android显示整数和浮点数的复数形式
我的目标是显示像“1星”、“2.5星”、“3星”这样的文本 对于浮点值,如Android显示整数和浮点数的复数形式,android,Android,我的目标是显示像“1星”、“2.5星”、“3星”这样的文本 对于浮点值,如1.0、2.0等,删除.0。但对于.5的值,显示浮点值2.5、3.5等。 这可以使用android复数吗 我用这种方法,但不起作用。 plurals.xml <plurals name="hotel_card_rating_text"> <item quantity="zero">@string/text_zero</item> <item quan
1.0、2.0等,删除.0
。
但对于.5
的值,显示浮点值2.5、3.5等。
这可以使用android复数吗
我用这种方法,但不起作用。
plurals.xml
<plurals name="hotel_card_rating_text">
<item quantity="zero">@string/text_zero</item>
<item quantity="one">@string/text_one</item>
<item quantity="two">@string/text_two</item>
<item quantity="few">@string/text_few</item>
<item quantity="many">@string/text_many</item>
<item quantity="other">@string/text_other</item>
</plurals>
<resources>
<string name="text_zero">%.1f stars</string>
<string name="text_one">1 star</string>
<string name="text_two">%.1f stars</string>
<string name="text_few">%.1f stars</string>
<string name="text_many">%.1f stars</string>
<string name="text_other">%.1f stars</string>
</resources>
您可以尝试使用下面的代码段,这是非常典型的
String somePostFixText = "star";
String output;
double starCount;
if (starCount > (double)1)
somePostFixText = somePostFixText+"s";
if(starCount == (long) starCount){
output = String.format("%d",(long)starCount)+" "+somePostFixText;
} else {
output = String.format("%s",starCount)+" "+somePostFixText;
}
//do whatever you want to do with output variable
快乐编码 strings.xml使用%s
而不是%.1f
<resources>
<string name="text_zero">%s stars</string>
<string name="text_one">1 star</string>
<string name="text_two">%s stars</string>
<string name="text_few">%s stars</string>
<string name="text_many">%s stars</string>
<string name="text_other">%s stars</string>
</resources>
使用复数时要小心。它有自己的问题,见下文:
啊。。!好的,我猜上面的代码也会与你的机制一起工作,只是通过将值转换为静态资源进行一些小的更改,你就可以实现你想要的。数量zero
quantity没有问题-这只是对数量如何工作以及它们的用途的常见误解。例如,zero
、one
和two
并不分别直接映射到精确的数字0、1和2,因此并非所有语言都使用这些数字(尽管这些数字显然可以被所有语言使用)。
<resources>
<string name="text_zero">%s stars</string>
<string name="text_one">1 star</string>
<string name="text_two">%s stars</string>
<string name="text_few">%s stars</string>
<string name="text_many">%s stars</string>
<string name="text_other">%s stars</string>
</resources>
DecimalFormat format = new DecimalFormat("#.#"); // format the number
float rating = getRating();
getContext().getResources()
.getQuantityString(R.plurals.hotel_card_rating_text, (int) rating, format.format(rating)));