【问题标题】:How do I convert an int into a string in Dart?如何在 Dart 中将 int 转换为字符串?
【发布时间】:2018-03-09 19:07:10
【问题描述】:

所以目前,我有一个由计数器表示的数字。这个数字是递增的,并且会不断变化。我的目标是每 3 位添加逗号,以使该数字在我的应用程序中更具可读性。我遇到的唯一问题是

String number = counter.replaceAllMapped(new RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), 
                                            (Match m) => '${m[1]},');

拒绝将整数 counter 作为 int。如何在运行之前将int counter 转换为String middle

String number = middle.replaceAllMapped(new RegExp(r'(\d{1,3})(?=(\d{3})+(?!\d))'), 
                                       (Match m) => '${m[1]},');

我的目标是这样的:

计数器 = 1000;

中间=“1000”;

number = "1,000";

我目前的解决方案是否可行?如果没有,我该如何更改我的代码以实现我的目标?

更新: 这是我的代码:

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int counter = 0;

  void _incrementCounter() {
    setState(() {
      if (counter > 99999999) {
        //WinLandingPage();
      } else if (counter >= 99000000) {
        counter++;
      } else if (counter > 990000) {
        counter += 1000000;
      } else if (counter > 9900) {
        counter += 10000;
      } else if (counter > 99) {
        counter += 100;
      } else counter++;
    });
  }

    //BELOW is where the format is taking place, and I have no idea how to 
    //get this part working. This is my broken attempt. 

  var f = new NumberFormat("#,###,###,###", "en_US");
  var number = f.format(counter);

    //What am I doing wrong here?

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar (
        title: new Text(widget.title),
      ),
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new Text(
              'Try to get $number to 100,000,000.',
            ),
            new Text(
              '$number',
              style: Theme.of(context).textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: _incrementCounter,
        backgroundColor: Colors.pinkAccent,
        tooltip: 'Increment',
        child: new Icon(Icons.add),
      ),
    );
  }
}

我在这段代码中做错了什么?我对 Dart 非常陌生,但我正在尽我所能通过试验、错误和你们的支持来解决这个问题。

【问题讨论】:

  • 谢谢data_garden。我试图以这种方式显示代码,但我不确定如何使用这个站点。
  • 您更新后的问题的实际和预期结果是什么?
  • 问题标题应该是“如何在 Dart 中格式化数字?”,对于那些正在寻找如何将 int 转换为字符串的人:stackoverflow.com/questions/54954182/…

标签: dart


【解决方案1】:

您可以使用 intl 包中的 NumberFormat 来执行此操作

README.md 中的示例

var f = new NumberFormat("###.0#", "en_US");
  print(f.format(12.345));
    ==> 12.34 

你的例子可能是

var f = new NumberFormat("#,###", "en_US");
  print(f.format(1000));
    ==> 1,000 

【讨论】:

  • 这非常有用,我真的很感激,但是我不知道如何用我已经拥有的代码来实现它。不过谢谢!
  • 如果我做对了,你需要像 new Text('Try to get ${f.format(counter)} to 100,000,000.',), 这样的东西,即你必须在每次构建时调用格式方法。
猜你喜欢
  • 2012-07-27
  • 2021-10-06
  • 2019-07-24
  • 2018-12-08
  • 2015-11-12
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多