formatFloat function

String formatFloat(
  1. String fmt,
  2. num value
)

Implementation

String formatFloat(String fmt, num value) {
  if (fmt.isEmpty) return '$value';
  // splits the integer/decimal mask parts
  final dot = fmt.indexOf(".");
  final intMask = dot < 0 ? fmt : fmt.substring(0, dot);
  final fracMask = dot < 0 ? '' : fmt.substring(dot + 1);
  final fracDigits = fracMask.replaceAll(RegExp("[^0#]"), "").length;
  var s = value.toStringAsFixed(fracDigits);
  var neg = s.startsWith("-");
  if (neg) s = s.substring(1);
  var intPart = fracDigits > 0 ? s.substring(0, s.indexOf(".")) : s;
  final fracPart = fracDigits > 0 ? s.substring(s.indexOf(".") + 1) : "";
  // thousands separator (when the mask contains ',')
  if (intMask.contains(",")) {
    final buf = StringBuffer();
    for (var i = 0; i < intPart.length; i++) {
      if (i > 0 && (intPart.length - i) % 3 == 0) buf.write(",");
      buf.write(intPart[i]);
    }
    intPart = buf.toString();
  }
  // minimum digit count for the integer part (the count of '0')
  final minInt = intMask.replaceAll(RegExp("[^0]"), "").length;
  while (intPart.replaceAll(",", "").length < minInt) {
    intPart = '0$intPart';
  }
  var result = intPart;
  if (fracDigits > 0) result = '$result$decimalSeparator$fracPart';
  return neg ? '-$result' : result;
}