如何在Dart、Flutter中拆分字符串



我从后端得到一个字符串平衡,它是像这样的430000。我希望产量是这样的43万。我该怎么做呢?

Row(
children: [
Padding(
padding: const EdgeInsets.only(
left: 12,
),
child: Text(
"₦ ${user.availableBalance.toStringAsFixed(0)} ",
style: TextStyle(
color: Colors.white,
fontSize: 21.sp,
),
)),
],
),

最好的方法是使用Regex,所以在顶部定义它

class _HomeTabState extends State<HomeTab>  {
//Regex
RegExp reg = RegExp(r'(d{1,3})(?=(d{3})+(?!d))'); //immport dar:core
RegExp regex = RegExp(r'([.]*0)(?!.*d)');
String Function(Match) mathFunc = (Match match) => '${match[1]},'; //match
...
//In your build
Widget build(BuildContext context) {
...
Row(
children: [
Padding(
padding: const EdgeInsets.only(
left: 12,
),
child: Text(
"₦ ${double.parse(user.availableBalance.toString()).toStringAsFixed(0)} " .replaceAllMapped(
reg, mathFunc),
style: TextStyle(
color: Colors.white,
fontSize: 21.sp,
),
)),
],
),
...
}
}

要使用它,只需将balance转换为double然后将其转换为String以便像这样访问toStringAsFixed(0)

"${double.parse(balance.toString()).toStringAsFixed(0)}".replaceAllMapped(reg, mathFunc),

so for 430 ->应该是430和4300 ->应该是4300和43000 ->应该是43,000

我建议使用intl包https://pub.dev/packages/intl
示例用法:

var f = NumberFormat("#,###.##");
print(f.format(123456789.4567));

这将导致以下输出:

123,456,789.46

注意,模式中的,指定分组分隔符,###指定组大小为3。.##指定对两个小数点进行舍入。


查看其他文档:https://api.flutter.dev/flutter/intl/NumberFormat-class.html

最新更新