formatFileSizeToStr static method

String formatFileSizeToStr(
  1. int fileSize, {
  2. int position = 2,
  3. int scale = 1024,
  4. int specified = -1,
})

格式化输出文件大小,自动转为人性化的单位输出

Implementation

static String formatFileSizeToStr(
  int fileSize, {
  int position = 2,
  int scale = 1024,
  int specified = -1,
}) {
  ///格式化数字 如果小数后面为0则不显示小数点
  ///[num]要格式化的数字 double 类型
  /// [position] 保留几位小数 int类型
  String formatNum({
    required double num,
    required int position,
  }) {
    String numStr = num.toString();
    int dotIndex = numStr.indexOf(".");

    ///当前数字有小数且需要小数位数小于需要的 直接返回当前数字
    if (num % 1 != 0 && (numStr.length - 1 - dotIndex < position)) {
      return numStr;
    }
    int numbs = math.pow(10, position).toInt();
    //模运算 取余数
    double remainder = num * numbs % numbs;
    //小数点后位数如果小于0则表示只保留整数,余数小于1不会进位防止出现200.01保留一位小数出现200.0的情况
    if (position > 0 && remainder >= 0.5) {
      return num.toStringAsFixed(position);
    }
    return num.toStringAsFixed(0);
  }

  double num = fileSize.toDouble();
  List sizeUnit = ["B", "KB", "MB", "GB", "TB", "PB"];
  // if (fileSize is String) {
  //   num = double.parse(fileSize);
  // } else if (fileSize is int || fileSize is double) {
  //   num = fileSize;
  // }
  //获取他的单位
  if (num > 0) {
    int unit = math.log(num) ~/ math.log(scale);
    if (specified >= 0 && specified < sizeUnit.length) {
      unit = specified;
    }
    double size = num / math.pow(scale, unit);
    String numStr = formatNum(num: size, position: position);
    return "$numStr ${sizeUnit[unit]}";
  }
  return "0 B";
}