toReadable method

String toReadable([
  1. int fractionDigits = 1,
  2. bool forceFraction = false
])

Convert to a human-readable string (e.g. 1234 -> 1.2K).

  • fractionDigits: the (max) number of digits after the decimal point.
  • forceFraction: force to display fraction digits even if it's zero. if false, trailing zeros will be removed.

Example

10203.toReadable(1);  // "10.2K"
10203.toReadable(2);  // "10.2K"
10203.toReadable(2, true);  // "10.20K"
10203.toReadable(3);  // "10.203K"

Implementation

String toReadable([int fractionDigits = 1, bool forceFraction = false]) {
  final absVal = abs();

  String raw = '';
  String unit = '';

  switch (absVal) {
    case < 1e3:
      raw = toStringAsFixed(fractionDigits);
      break;
    case < 1e6:
      raw = (this / 1e3).toStringAsFixed(fractionDigits);
      unit = 'K';
      break;
    case < 1e9:
      raw = (this / 1e6).toStringAsFixed(fractionDigits);
      unit = 'M';
      break;
    default:
      raw = (this / 1e9).toStringAsFixed(fractionDigits);
      unit = 'B';
      break;
  }

  // remove trailing zeros if not forceFraction
  if (!forceFraction) raw = raw.replaceAll(RegExp(r'\.?0+$'), '');

  return '$raw$unit';
}