如何在Dart中转换大量数字以缩短K / M / B

时间:2018-10-05 08:16:50

标签: dart

如何创建将Dart中带有字符的大数转换成短数的函数?

喜欢

1000 => 1K
10000 => 10K
1000000 => 1M
10000000 => 10M
1000000000 => 1B

4 个答案:

答案 0 :(得分:1)

def func1(func):
    def func2():
        print("Before func2")
        func()
        print("After func2")
    return func2()

@func1
def func_d():
    print("I am being decorated")

func_d()

答案 1 :(得分:1)

如果只需要后缀,则是一种更简单的方法。它可能没有进行编译,但这就是想法。

String getSuffix (int t)
{
    int i = -1;
    for ( ; (t /= 1000) > 0 ; i++ );
    return ['K','M','B'][i];
}

修改

这是执行此操作的数学方法,并且可以编译。关键是要搜索“三位小数的组”位数:

  • x 000-1
  • x 000 000-2

,依此类推。这是日志 1000 编号

String getSuffix (int num)
{
    int i = ( log(num) / log(1000) ).truncate();
    return (num / pow(1000,i)).truncate().toString() +  [' ','K','M','B'][i];
}

答案 2 :(得分:1)

Intl软件包将其作为“紧凑”数字来实现,但是它具有固定的格式,并且还会随不同的语言环境而变化,这可能是您想要的,也可能不是您想要的。

答案 3 :(得分:0)

创建一个类并在任何地方使用其静态方法。

class NumberFormatter{
  static String formatter(String currentBalance) {
    try{
      // suffix = {' ', 'k', 'M', 'B', 'T', 'P', 'E'};
      double value = double.parse(currentBalance);

      if(value < 1000){ // less than a thousand
        return value.toStringAsFixed(2);
      }else if(value >= 1000 && value < (1000*100*10)){ // less than a million
        double result = value/1000;
        return result.toStringAsFixed(2)+"k";
      }else if(value >= 1000000 && value < (1000000*10*100)){ // less than 100 million
        double result = value/1000000;
        return result.toStringAsFixed(2)+"M";
      }else if(value >= (1000000*10*100) && value < (1000000*10*100*100)){ // less than 100 billion
        double result = value/(1000000*10*100);
        return result.toStringAsFixed(2)+"B";
      }else if(value >= (1000000*10*100*100) && value < (1000000*10*100*100*100)){ // less than 100 trillion
        double result = value/(1000000*10*100*100);
        return result.toStringAsFixed(2)+"T";
      }
    }catch(e){
      print(e);
    }
  }
}