【问题标题】:How to add space between numbers?如何在数字之间添加空格?
【发布时间】:2023-01-02 22:46:16
【问题描述】:

告诉我如何拆分数字之间出现的空格数(1 000、1 000 000 等)。我明白这应该连续发生并扭转它。然后把胶弄断再翻过来。我刚刚设法扩大。我不知道如何分解它。或者也许 dart 格式中有一些方法像其他方法一样?在互联网上,有很多针对 JavaScript 或其他具有格式方法的语言的决定。但是我没有找到 Dart 的东西。

void main(List<String> args) {
    var num = 123456789;
    var num1 = (num.toString()).split('').reversed.join();
    print(num1);
}

【问题讨论】:

标签: dart


【解决方案1】:

对于货币或报价、价格和数字的格式化和本地化,请查看intl packageNumberFormat class,因为我认为这是您想要实现的。不同的国家有不同的显示数字的方法。

另外 here 你有很好的解决方案。

【讨论】:

  • 很酷,但我无法根据需要从 1000 到 1000 制作格式。
【解决方案2】:

您应该使用正则表达式查找三位数并用一个空格 (' ') 分隔。这是一个扩展函数(加上一个工作示例),用于对包含数字的任何字符串执行此操作:

extension StringNumberExtension on String {
  String spaceSeparateNumbers() {
    final result = this.replaceAllMapped(
        RegExp(r'(d{1,3})(?=(d{3})+(?!d))'), (Match m) => '${m[1]} ');
    return result;
  }
}

void main() async {
  print(
      'this is a number: 12345678901234567890123456789'.spaceSeparateNumbers());
}

【讨论】:

  • 行。有用。谢谢,但是没有功能怎么写
  • 如果你不想有扩展功能,你可以直接在字符串上使用'replaceAllMapped'。如果想使用格式化程序,您可以使用“intl”包。
【解决方案3】:

此函数从右边开始每 3 位数字添加一个空格:

String formatNumber(int number) {
    if (number == null) return '...'; //for those like me who don't use null-safety

    String result = '';
    int digit = 1; //to know when to add a space or not
    while (number > 0) {
      if (digit > 1 && digit % 3 == 1) //don't add a space at the very beginning
        result = (number % 10).toString() + ' ' + result;
      else
        result = (number % 10).toString() + result;

      digit++;
      number = number ~/ 10; //divides by 10, in other words, shifts 1 digit to the right
    }
    return result;
  }

【讨论】: