toRoman method

String toRoman()

Converts this number to a Roman numeral string (1–3999).

2024.toRoman() // 'MMXXIV'

Implementation

String toRoman() {
  final n = toInt();
  if (n < 1 || n > 3999) throw RangeError('toRoman supports 1–3999');
  const vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
  const syms = [
    'M',
    'CM',
    'D',
    'CD',
    'C',
    'XC',
    'L',
    'XL',
    'X',
    'IX',
    'V',
    'IV',
    'I'
  ];
  final buf = StringBuffer();
  var remaining = n;
  for (var i = 0; i < vals.length; i++) {
    while (remaining >= vals[i]) {
      buf.write(syms[i]);
      remaining -= vals[i];
    }
  }
  return buf.toString();
}