format method

  1. @override
String format(
  1. num value
)
inherited

Formats value into a display string.

Implementation

@override
String format(num value) {
  final integer = _checkedInteger(value, 'Must be a finite integer.');
  if (integer == 0) return digitSymbols[0];
  if (integer < 0) return '负${format(-integer)}';

  final sections = <int>[];
  var rest = integer;
  while (rest > 0) {
    sections.add(rest % 10000);
    rest ~/= 10000;
  }
  if (sections.length > sectionUnits.length) {
    throw ArgumentError.value(
      value,
      'value',
      'Exceeds supported Chinese section units.',
    );
  }

  final buffer = StringBuffer();
  var zeroPending = false;
  for (var index = sections.length - 1; index >= 0; index -= 1) {
    final section = sections[index];
    if (section == 0) {
      if (buffer.isNotEmpty) zeroPending = true;
      continue;
    }

    if (buffer.isNotEmpty && (zeroPending || section < 1000)) {
      buffer.write(digitSymbols[0]);
    }

    final omitLeadingOne =
        omitLeadingOneForTen && buffer.isEmpty && section < 20;

    buffer
      ..write(_formatSection(section, omitLeadingOneForTen: omitLeadingOne))
      ..write(sectionUnits[index]);
    zeroPending = false;
  }

  return buffer.toString();
}