我试着四处搜索,但我在找到这个问题的完整解决方案时遇到了问题:我想格式化一个 Int
所以总位数总是3。举几个例子:
1000000 -> 1,00m
678945 -> 678k
65432 -> 65,4k
5437 -> 5,43k
数字不应该低于1000或大于10亿,所以其他情况并不重要
这是我最接近的一次:
@JvmStatic
fun formatPointsTop3(points: Int?): String {
if (points == null) return ""
val formatter = NumberFormat.getInstance(Locale.ITALIAN)
val mathContext = MathContext(3, RoundingMode.DOWN)
return when {
points < 1000 -> {
"$points"
}
points < 1000000 -> {
val bigDecimal = BigDecimal(points / 1000.0, mathContext)
"${formatter.format(bigDecimal)}k"
}
else -> {
val bigDecimal = BigDecimal(points / 1000000.0, mathContext)
"${formatter.format(bigDecimal)}m"
}
}
}
这适用于大多数情况,除了1000000输出1m(我想要100M)。添加 formatter.minimumFractionDigits = 2
给所有数字加小数。
有没有办法做到这一点,而不做奇怪的东西直接对字符串?
2条答案
按热度按时间isr3a4wc1#
最后我做了这个:
它很难看,但它看起来比字符串更好
7nbnzgx92#
应该有。首先,弄清楚您想要如何呈现它,这就好像您对每个log(n)有不同的理解(例如,输入中有多少个数字)。对于7位数字,您希望呈现值除以一百万,并带有2个小数位数。对于8位数字,您需要值div million和1个分数,等等。这将是大量的代码,也许字符串操作更简单。