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

Dart/Flutter中如何将数字格式化为带千位分隔符的样式

Flutter 字符串余额转千位分隔符格式实现

你可以直接用官方维护的数字格式化工具实现,不用手写正则处理边界,稳定不报错。

  • 首先引入intl包(Flutter官方生态的格式化工具,无额外依赖风险),在pubspec.yaml添加依赖:
dependencies:
  intl: ^0.19.0 # 可替换为当前最新稳定版本
  • 提前初始化千位分隔符格式化实例(不要在build方法里初始化,避免重复创建消耗性能):
// 无小数场景用这个规则,格式化后和你原来toStringAsFixed(0)效果一致,仅加千位分隔
final balanceFormatter = NumberFormat('#,##0', 'en_US');

// 如果后续需要保留2位小数,换成这个规则即可
// final balanceFormatter = NumberFormat('#,##0.00', 'en_US');
  • 替换你原有代码里的余额显示逻辑,注意先把后端返回的字符串类型余额转成数值,加异常兜底避免崩溃:
Row(
  children: [
    Padding(
      padding: const EdgeInsets.only(
        left: 12,
      ),
      child: Text(
        "₦ ${balanceFormatter.format(double.tryParse(user.availableBalance) ?? 0)} ",
        style: TextStyle(
          color: Colors.white,
          fontSize: 21.sp,
        ),
      ),
    ),
  ],
)

效果验证

传入字符串值430000时,最终显示效果为₦ 430,000,完全符合需求。

无额外包的简易实现(不推荐,超长数值场景容易出边界问题):
如果你不想引入intl包,可以用正则临时处理:

String formatThousands(String rawStr) {
  final targetNum = int.tryParse(rawStr) ?? 0;
  return targetNum.toString().replaceAllMapped(
    RegExp(r'(\d{1,3})(?=(\d{3})+$)'),
    (match) => '${match[1]},'
  );
}

使用时直接拼接:"₦ ${formatThousands(user.availableBalance)} "

内容的提问来源于stack exchange,提问作者Victor Ayodeji Ogundola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:21:28