number function

String number(
  1. num value,
  2. HatangLocale locale, {
  3. int decimals = 0,
})

Groups digits: 1.234.567 (vi) or 1,234,567 (en); at most decimals fraction digits.

Implementation

String number(num value, HatangLocale locale, {int decimals = 0}) {
  final negative = value < 0;
  final abs = value.abs();
  final fixed = abs.toStringAsFixed(decimals);
  final dot = fixed.indexOf('.');
  final intPart = dot < 0 ? fixed : fixed.substring(0, dot);
  final frac = dot < 0 ? '' : fixed.substring(dot + 1);
  final sep = locale == HatangLocale.vi ? '.' : ',';
  final b = StringBuffer();
  for (var i = 0; i < intPart.length; i++) {
    if (i > 0 && (intPart.length - i) % 3 == 0) b.write(sep);
    b.write(intPart[i]);
  }
  var out = b.toString();
  if (frac.isNotEmpty) out = '$out${locale == HatangLocale.vi ? ',' : '.'}$frac';
  return negative ? '-$out' : out;
}