You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 00:05:20