Flutter中如何用intl包实现K与M混合的数字格式化?
实现K/M单位的数字格式化方案
默认的NumberFormat.compact()无法满足你需要的精准格式控制,你可以通过自定义NumberFormat来实现:
自定义格式化类
创建一个自定义格式化类,根据数值范围选择对应单位:
class CustomNumberFormat : NumberFormat() { private val formatter = DecimalFormat("0.#") override fun format(number: Double, toAppendTo: StringBuffer, pos: FieldPosition): StringBuffer { return when { number >= 1_000_000 -> { toAppendTo.append(formatter.format(number / 1_000_000)).append("M") } number >= 1_000 -> { toAppendTo.append(formatter.format(number / 1_000)).append("K") } else -> { toAppendTo.append(formatter.format(number)) } } } override fun format(number: Long, toAppendTo: StringBuffer, pos: FieldPosition): StringBuffer { return format(number.toDouble(), toAppendTo, pos) } override fun parse(source: String, parsePosition: ParsePosition): Number? { // 若无需解析功能,返回null即可;如需解析可自行实现逻辑 return null } }
应用到柱状图Y轴
把自定义的格式化类传入NumericAxis:
NumericAxis(numberFormat: CustomNumberFormat())
这样就能实现你要的效果:
- 5000000 → 0.5M
- 10000000 → 1M
- 1500 → 1.5K
- 5000 → 5K
内容的提问来源于stack exchange,提问作者La Pyae
相关产品推荐
相关产品推荐

