public static string ToRomanNumerals(this int?num, NumeralStyles style = NumeralStyles.Subtractive) { var sb = new StringBuilder(); if (num.HasValue && num != 0) { var thousands = Math.DivRem(num.Value, 1000, out var tRem); var hundreds = Math.DivRem(tRem, 100, out var hRem); var tens = Math.DivRem(hRem, 10, out var tenRem); switch (style) { case NumeralStyles.Subtractive: sb.AppendRepeat(Numerals.M, thousands); SubtractiveNumerals(sb, hundreds, (Numerals.C, Numerals.D, Numerals.M)); SubtractiveNumerals(sb, tens, (Numerals.X, Numerals.L, Numerals.C)); SubtractiveNumerals(sb, tenRem, (Numerals.I, Numerals.V, Numerals.X)); break; case NumeralStyles.Additive: sb.AppendRepeat(Numerals.M, thousands); AdditiveNumerals(sb, hundreds, (Numerals.C, Numerals.D, Numerals.M)); AdditiveNumerals(sb, tens, (Numerals.X, Numerals.L, Numerals.C)); AdditiveNumerals(sb, tenRem, (Numerals.I, Numerals.V, Numerals.X)); break; } } return(sb.ToString()); }
public static string ToRomanNumerals(this int num, NumeralStyles style = NumeralStyles.Subtractive) => ToRomanNumerals((int?)num, style);