formatCoin static method

String formatCoin(
  1. dynamic amount, {
  2. String symbol = '',
  3. int? decimalDigits = 2,
  4. bool leftSymbol = false,
  5. bool useUnitSuffix = false,
})

Implementation

static String formatCoin(
  dynamic amount, {
  String symbol = '',
  int? decimalDigits = 2,
  bool leftSymbol = false,
  bool useUnitSuffix = false, // Thêm parameter để bật/tắt việc sử dụng B,M,K
}) {
  if (amount is String) {
    try {
      amount = double.parse(amount);
    } catch (e) {
      amount = 0;
    }
  }

  double numAmount = amount.toDouble();
  String suffix = '';

  if (useUnitSuffix && numAmount != 0) {
    if (numAmount.abs() >= 1e12) {
      numAmount /= 1e12;
      suffix = 'T';
    } else if (numAmount.abs() >= 1e9) {
      numAmount /= 1e9;
      suffix = 'B';
    } else if (numAmount.abs() >= 1e6) {
      numAmount /= 1e6;
      suffix = 'M';
    } else if (numAmount.abs() >= 1e3) {
      numAmount /= 1e3;
      suffix = 'K';
    } else if (numAmount.abs() < 1 && numAmount.abs() > 0) {
      if (numAmount.abs() >= 1e-3) {
        numAmount *= 1e3;
        suffix = 'm';
      } else if (numAmount.abs() >= 1e-6) {
        numAmount *= 1e6;
        suffix = 'μ';
      } else if (numAmount.abs() >= 1e-9) {
        numAmount *= 1e9;
        suffix = 'n';
      }
    }
  }

  // Xác định số chữ số thập phân
  if (numAmount == 0) {
    decimalDigits = 0;
  } else if (suffix.isEmpty) {
    if (numAmount.abs() < 100) {
      decimalDigits = decimalDigits ?? 6;
    }
  } else {
    // Với các suffix, điều chỉnh số chữ số thập phân theo giá trị
    if (numAmount.abs() >= 100) {
      decimalDigits = 1;
    } else if (numAmount.abs() >= 10) {
      decimalDigits = 2;
    } else {
      decimalDigits = 3;
    }
  }

  var formatLargeCoin = NumberFormat.currency(
    locale: 'en_US',
    symbol: symbol,
    decimalDigits: decimalDigits,
    customPattern: leftSymbol ? '\u00a4 #,###' : '#,### \u00a4',
  );

  String formatted = formatLargeCoin.format(numAmount);
  formatted = removeUnnecessaryZeros(formatted, symbol, leftSymbol);

  // Thêm số 0 phía trước nếu bắt đầu bằng dấu chấm
  if (formatted.startsWith('.')) {
    formatted = '0$formatted';
  }
  if (formatted.startsWith('-.')) {
    formatted = formatted.replaceFirst('-.', '-0.');
  }

  // Thêm suffix vào kết quả
  if (suffix.isNotEmpty) {
    if (symbol.isEmpty) {
      formatted = '$formatted$suffix';
    } else {
      formatted = formatted.replaceAll(symbol, '').trim();
      formatted = leftSymbol
          ? '$symbol $formatted$suffix'
          : '$formatted$suffix $symbol';
    }
  }

  return formatted;
}