示例#1
0
        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());
        }
示例#2
0
 public static string ToRomanNumerals(this int num, NumeralStyles style = NumeralStyles.Subtractive) => ToRomanNumerals((int?)num, style);