flutter 如何在飞梭和 dart 中将数字格式化为千位分隔符?

zujrkrfu  于 2023-01-09  发布在  Flutter
关注(0)|答案(1)|浏览(168)

我需要在flutter和dart中将数字作为千位分隔符来处理字符串和数字。为此,经常建议使用intl package,但我更喜欢使用扩展名,而不使用intl包。
例如:当我收到如下文本时:"+2500000.7550",我的最终输出将为"+2,500,000.7550",并且当我有如下文本时:"5674-5655-4411-2211",我的最终输出将作为"5674 - 5655 - 4411 - 2211"交付。
最后,我希望能够以特定的模式(例如,2乘2、3乘3或4乘4)用特定的字符分隔字符串变量。

0vvn1miw

0vvn1miw1#

我试图通过编写这个扩展来解决这个挑战,但如果有更好的解决方案或代码,我将不胜感激。

extension SubString on String {
  String addSeparator({int? qty = 3, String? separator = ","}) {
    assert(qty! >= 1, "[qty] value as the number separator must be positive!");
    assert(
        separator! != "", "[separator] value as the number separator must not be empty!");
    
     String tempNum=this;
     String sign="";
     String decimal="";

  if(RegExp(r'^[-+]?[0-9](\d+\.?\d*|\.\d+)').hasMatch(this)){ 
    if(this[0]=="+"||this[0]=="-"){
    sign=this[0];
    tempNum=this.substring(1);
  }
    if(tempNum.contains(".")){
          decimal="."+tempNum.split(".")[1];
      tempNum=tempNum.split(".")[0];
    }
  }
    
    return sign+(tempNum.split('')
        .reversed
        .join()
        .replaceAllMapped(
            RegExp(r'(.{})(?!$)'.replaceAll('''{}''', '''{$qty}''')),
            (m) => '${m[0]}${separator}')
        .split('')
        .reversed
        .join())+decimal;
  }
}

并像下面的代码一样使用它:

void main() {
  
  String numberExample = "+4654654.23535";
  
  print('numberExample:  ${numberExample.addSeparator(qty: 3,separator: ",")}');

  String ibanExample= "5674565544112211";
  
  print('ibanExample: ${ibanExample.addSeparator(qty: 4,separator: "-")}'); 

}

相关问题