formatNumberString static method
String
formatNumberString(
- String raw, {
- required NumberGroupingSystem groupingSystem,
- required bool allowDecimals,
- int? decimalPlaces,
- 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();
}