Android Studio中Kotlin大数值可读格式化依赖咨询
格式化大数值为带后缀的简洁展示(Kotlin/Android)
嘿,这个需求在数据展示场景里太常见了!我给你两种靠谱的方案,按需选就行:
方案一:自己实现轻量工具类(无依赖,灵活可控)
如果你不想引入额外依赖,自己写个Kotlin扩展函数或者工具类就够了,逻辑也不复杂。核心是根据数值大小判断量级,然后做除法+格式化:
fun Long.formatWithSuffix(): String { return when { this >= 1_000_000_000 -> String.format("%.1f B", this / 1_000_000_000.0) this >= 1_000_000 -> String.format("%.1f M", this / 1_000_000.0) this >= 1_000 -> String.format("%.1f K", this / 1_000.0) else -> this.toString() } } // 适配Double类型的重载 fun Double.formatWithSuffix(): String { return when { this >= 1_000_000_000 -> String.format("%.1f B", this / 1_000_000_000.0) this >= 1_000_000 -> String.format("%.1f M", this / 1_000_000.0) this >= 1_000 -> String.format("%.1f K", this / 1_000.0) else -> String.format("%.1f", this) } }
用法超简单,直接调用就行:
val num = 331330464L println(num.formatWithSuffix()) // 输出 331.3 M
要是你需要调整小数位数(比如保留两位),只要把%.1f改成%.2f就行,完全可控。
方案二:使用现成的依赖库(省时间,功能全)
如果想要更完善的功能(比如多语言适配、更多量级、自定义格式),可以试试这些成熟的库:
1. Apache Commons Lang3
这是Java生态里常用的工具库,里面的工具类能帮你简化数值处理,不过需要自己结合后缀逻辑。在Module级的build.gradle里添加依赖:
implementation 'org.apache.commons:commons-lang3:3.14.0'
示例用法:
import org.apache.commons.lang3.math.NumberUtils import java.text.DecimalFormat fun formatNumber(num: Long): String { val df = DecimalFormat("0.0") return when { num >= 1_000_000_000 -> "${df.format(num / 1_000_000_000.0)} B" num >= 1_000_000 -> "${df.format(num / 1_000_000.0)} M" num >= 1_000 -> "${df.format(num / 1_000.0)} K" else -> num.toString() } }
2. 专门的数值格式化库:NumberFormatter
有个第三方库专门做这类需求,支持自定义后缀、小数位数、多语言,在开发者圈子里挺受欢迎的。添加依赖:
implementation 'com.github.MFlisar:NumberFormatter:1.9'
用法示例(配置规则即可):
val formatter = NumberFormatter.Builder() .setDecimalPlaces(1) .addSuffix(1000, "K") .addSuffix(1000000, "M") .addSuffix(1000000000, "B") .build() println(formatter.format(331330464L)) // 输出 331.3 M
总结
- 只需要基础功能的话,自己写工具类最轻便,无依赖还能灵活修改;
- 涉及复杂场景(多语言、大量级自定义)的话,选现成依赖库更省事儿。
内容的提问来源于stack exchange,提问作者M. Abdel-Ghani
相关产品推荐
相关产品推荐

