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
相关产品推荐
相关产品推荐

