gpt4 book ai didi

用于浮点值的 Android 复数

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:55 26 4
gpt4 key购买 nike

我想在我的 Android 项目中使用复数形式。但是,我提供的值可以是浮点值。

例如,当设置 1.5 星时,我希望这个理解,它不是 1 星而是 1.5 星s

<plurals name="stars">
<item quantity="one">%d star</item>
<item quantity="other">%d stars</item>
</plurals>

但是,Android 系统似乎只使用整数值 (%d)。

方法如下所示:

String getQuantityString(@PluralsRes int id, int quantity, Object... formatArgs)

其中 quantity 定义为 Int

有什么解决办法吗?

最佳答案

经过进一步研究,似乎对此没有好的解决方案

正如在其他答案中看到的那样,它们总是需要大量的“手动处理”,与创建单独的字符串资源相比,不需要不同的工作流程。

一般建议似乎是手动舍入/处理浮点值(例如检查浮点值是否匹配 1.0),然后使用适当的 Int 值进行复数调用。

但除了没有真正使用复数之外,其他语言也会出现问题(例如,我不知道 1.5 颗星在另一种语言中是否也像英语一样是复数),因此这些舍入选项可能并不普遍适用.

所以答案是:似乎没有完美的解决方案(意思是Android系统“自动”解决)。

因此,我实际上做的是简单地选择异常(exception)并在那里使用不同的字符串。所以(伪代码)目前的做法看起来像

// optionally wrap different languages around
// if language == English

when (amountStars) {
is 1.0 -> getString(R.string.stars_singular, 1)
... ->
else -> getString(R.string.stars_plural, amountStars)
}
// if language == Chinese ...

其他情况必须“硬编码”。所以例如你必须决定 0 是否意味着

0 星s”(复数字符串)或

没有星号”(单数字符串)

但与使用通用占位符的单独字符串资源相比,使用复数似乎没有真正的好处。另一方面,这(终于对我而言)为格式化选项提供了更大的灵 active 。例如,人们可能会创建一个像“1 星半”这样的文本,它再次变成单数(即使在数字上我们会写 1.5 星)。

关于用于浮点值的 Android 复数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54882981/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com