将数字转换为Dart中的人类可读格式(例如1.5k,5m,1b)?

时间:2019-02-14 12:47:54

标签: dart flutter

我正在开发一个与社交聊天相关的应用,我想将大数字转换为人类可读的格式(例如1500到1.5k),而且我还是Dart的新手。 您的帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以使用Flutter的NumberFormat类,该类具有一些内置函数来实现所需的结果。

Check out this link for NumberFormat class of flutter

示例: 如果您要使用货币,这是一种方法。

var _formattedNumber = NumberFormat.compactCurrency(
  decimalDigits: 2,
  symbol: '', // if you want to add currency symbol then pass that in this else leave it empty.
).format(numberToFormat);

print('Formatted Number is $numberToFormat');

此代码的输出为:

如果输入了1000,则输出为1K

另一种方法是仅使用NumberFormat.compact()即可提供所需的输出...

// In this you won't have to worry about the symbol of the currency.
var _formattedNumber = NumberFormat.compact().format(numberToFormat);
print('Formatted Number is $numberToFormat');

以上示例的输出也将是:

如果输入了1000,则输出为1K

我尝试了这个并且正在工作...

答案 1 :(得分:0)

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

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

      if(value < 1000000){ // less than a million
        return value.toStringAsFixed(2);
      }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);
    }
  }
}