formatNumberString static method

String formatNumberString(
  1. String raw, {
  2. required NumberGroupingSystem groupingSystem,
  3. required bool allowDecimals,
  4. int? decimalPlaces,
  5. required bool allowNegative,
})

Formats a full numeric string with grouping, decimals, and negative sign.

Implementation

static String formatNumberString(
  String raw, {
  required NumberGroupingSystem groupingSystem,
  required bool allowDecimals,
  int? decimalPlaces,
  required bool allowNegative,
}) {
  if (raw.isEmpty) return '';

  bool isNegative = false;
  String clean = raw;
  if (allowNegative && clean.startsWith('-')) {
    isNegative = true;
    clean = clean.substring(1);
  }

  final hasDecimal = allowDecimals && clean.contains('.');
  String integerPart = hasDecimal ? clean.split('.').first : clean;
  String? decimalPart = hasDecimal ? clean.split('.').sublist(1).join('') : null;

  integerPart = integerPart.replaceAll(RegExp(r'[^\d]'), '');
  if (decimalPart != null) {
    decimalPart = decimalPart.replaceAll(RegExp(r'[^\d]'), '');
    if (decimalPlaces != null && decimalPlaces > 0 && decimalPart.length > decimalPlaces) {
      decimalPart = decimalPart.substring(0, decimalPlaces);
    }
  }

  final formattedInt = formatIntegerPart(integerPart, groupingSystem);

  final buffer = StringBuffer();
  if (isNegative && (formattedInt.isNotEmpty || (decimalPart != null && decimalPart.isNotEmpty))) {
    buffer.write('-');
  }
  buffer.write(formattedInt);

  if (hasDecimal) {
    buffer.write('.');
    if (decimalPart != null) {
      buffer.write(decimalPart);
    }
  }

  return buffer.toString();
}