toCurrencyString method

String toCurrencyString({
  1. String delimiter = ',',
  2. int precision = 2,
  3. String symbol = '',
})

Converts to a currency-formatted string.

1234567.89.toCurrencyString() // '1,234,567.89'
1000.toCurrencyString(symbol: '\$') // '\$1,000'

Implementation

String toCurrencyString({
  String delimiter = ',',
  int precision = 2,
  String symbol = '',
}) {
  final fixed = toStringAsFixed(precision);
  final parts = fixed.split('.');
  var integer = parts[0];
  final decimal = parts.length > 1 ? parts[1] : '';

  // Insert thousands delimiters
  final buf = StringBuffer();
  for (var i = 0; i < integer.length; i++) {
    if (i > 0 && (integer.length - i) % 3 == 0) buf.write(delimiter);
    buf.write(integer[i]);
  }
  integer = buf.toString();

  final hasDecimal = decimal.isNotEmpty && decimal != '0' * precision;
  final result = hasDecimal ? '$integer.$decimal' : integer;
  return '$symbol$result';
}